css - limitaciones de usar @ Html.EditorForModel
asp.net razor (2)
Estoy trabajando en una aplicación web asp.net mvc-5. Tengo la siguiente clase de modelo: -
public class Details4
{
[HiddenInput(DisplayValue=false)]
public string RESOURCENAME { set; get; }
[Display (Name="Account Name")]
[Required]
public string ACCOUNTNAME { set; get; }
[Display(Name = "Resource type")]
[Required]
public string RESOURCETYPE { set; get; }
[DataType(DataType.Password)]
[Required]
public string PASSWORD { set; get; }
[Display(Name = "Description")]
[DataType(DataType.MultilineText)]
public string Description { set; get; }
[Display(Name= "URL")]
[Url]
public string RESOURCEURL { set; get; }
[Display(Name="Owner Name")]
[Required]
public string OWNERNAME { set; get; }
[Display(Name = "Resource Group Nam")]
public string RESOURCEGROUPNAME { set; get; }
[JsonProperty("Domain")]
public string DomainName { set; get; }
[JsonProperty("DNSNAME")]
public string DNSNAME { set; get; }
[Display(Name = "Department")]
public string DEPARTMENT { set; get; }
[Display(Name = "Location")]
public string LOCATION { set; get; }
public List<RESOURCECUSTOMFIELD> RESOURCECUSTOMFIELD { set; get; }
}
public class RESOURCECUSTOMFIELD
{
public string CUSTOMLABEL { set; get; }
public string CUSTOMVALUE { set; get; }
}
ahora usualmente uso @Html.EditorFor()
& LabelFor()
en el nivel de campo. pero para este modelo quería comenzar a usar @Html.EditorForModel
ya que tendré menos marcas en la vista: -
@Html.EditorForModel()
Ahora el resultado de esto no fue el 100% de lo que esperaba:
Entonces, ¿alguien puede aconsejar cómo puedo superar estas limitaciones ?:
¿Hay alguna manera de tener el campo ResourceType como una lista de recuperación? . ahora, si estoy renderizando campos separados, puedo usar
@Html.DropDownlistFor
.. pero no estoy seguro de cómo puedo manejar esto cuando uso@Html.EditorForModel
?¿hay alguna manera de modificar el diseño generado?, ahora es habitual en toda mi aplicación. Tengo el siguiente diseño para la etiqueta -> cuadro de texto: -
<div> <span class="f">@Html.DisplayNameFor(model => model.Resource.RESOURCENAME)</span> @Html.EditorFor(model => model.Resource.RESOURCENAME) @Html.ValidationMessageFor(model => model.Resource.RESOURCENAME) </div>
donde tengo la etiqueta y el texto en la misma línea, y envuelvo la etiqueta con una clase = f que mostrará la etiqueta en negrita. ¿puedo modificar la salida generada desde EditorForModel
para que la etiqueta y el cuadro de texto EditorForModel
en la misma línea, en lugar de estar en 2 líneas separadas?
- ¿Podré forzar a EditorForModel a representar las columnas de la lista
RESOURCECUSTOMFIELD
?
1.Usted puede usar [UIHint ("custom_template")] sobre el campo de su modelo. Por ejemplo:
public class Class1
{
public int id { get; set; }
public string Name { get; set; }
public string LastName { get; set; }
[UIHint("gender_template")]
public string Gender { get; set; }
}
Entonces debes crear gender_template.cshtml en Shared / EditorTemplates como en la imagen de abajo.
código de ejemplo en el archivo gender_template.cshtml.
@Html.DropDownList(
"",
new SelectList(
new[]
{
new { Value = "Male", Text = "Male" },
new { Value = "Female", Text = "Female" },
},
"Value",
"Text",
Model
)
)
Luego en el código de la página Ver es
@model MvcApplication2.Models.Class1
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@Html.EditorForModel()
El resultado después de ejecutar la página de vista es
Usted puede hacer más plantilla personalizada que necesite.
- Puede hacer como @ html.EditorFor, para usar @ Html.DisplayFor sintaxis debe crear un archivo de plantilla en Shared / DisplayTemplates, puede escribir / agregar su propia sintaxis html en el archivo de plantilla.
EditorForModel
plantilla predeterminada de EditorForModel
no es altamente personalizable. Debes escribir una plantilla de editor para resolver todos tus problemas. Puedes consultar este tutorial . Tendrá que escribir todas las propiedades manualmente, pero lo hará solo una vez para cada modelo. Coloque la plantilla en la carpeta EditorTemplates/
y toda la aplicación puede usarla. Para contestar tus balas:
Ahora que escribe su propia plantilla, puede usar cualquier tipo de entrada para sus propiedades. El editor predeterminado para el tipo de
string
es un cuadro de texto ( menú desplegable para el tipo deenum
).Tendrá que escribir su propio diseño en la plantilla. Eso es exactamente lo que quieres.
También puede escribir una plantilla de editor para
RESOURCECUSTOMFIELD
y usarla en su plantilla. Puede escribir una plantilla incluso paraIEnumerable<RESOURCECUSTOMFIELD>
:@model IEnumerable<RESOURCECUSTOMFIELD> @foreach(var customModel in Model) { @Html.LabelFor(m => customModel.CUSTOMLABEL ) @Html.TextBoxFor(m => customModel.CUSTOMVALUE ) }
Y úsalo como (en tu plantilla principal):
@Html.EditorFor(m => m.RESOURCECUSTOMFIELD )
También hay algo que se llama DisplayTemplate si desea cambiar cómo funciona DisplayFor
para el modelo.