Les modèles peuvent être utilisés qu'avec accès sur le terrain, l'accès à la propriété, à une seule dimension du tableau d'index, ou seul paramètre personnalisé de l'indexeur expressions
Mon modèle:
public class EmployeeModel
{
[Required]
[StringLength(50)]
[Display(Name = "Employee Name")]
public string EmpName { get; set; }
[Required]
[StringLength(150)]
[Display(Name = "Email Id")]
public string Email { get; set; }
[Required]
[Range(18, 150)]
public int Age { get; set; }
}
De mon point de vue:
@Html.MyEditFor(model=>model.EmpName)
@Html.MyEditFor(model=>model.Email)
@Html.MyEditFor(model=>model.Age)
Mon helper personnalisé:
public static MvcHtmlString MyEditFor<TModel>(this HtmlHelper<TModel> html, Expression<Func<TModel, object>> expression)
{
var partial = html.Partial("Item", new LabelEditorValidation() { Label = html.LabelFor(expression), Editor = html.EditorFor(expression), Validation = html.ValidationMessageFor(expression) }).ToString();
return MvcHtmlString.Create(partial);
}
Élément.cshtml - vue partielle:
@model MyClientCustomValidation.Models.LabelEditorValidation
<tr>
<td class="editor-label" style="border: 0;">
@Model.Label
</td>
<td class="editor-field" style="border: 0">
@Model.Editor
@Model.Validation
</td>
</tr>
LabelEditorValidation - modèle pour l'Article.cshtml:
public class LabelEditorValidation
{
public MvcHtmlString Validation { get; set; }
public MvcHtmlString Label { get; set; }
public MvcHtmlString Editor { get; set; }
}
J'ai exception
Modèles peuvent être utilisés qu'avec accès sur le terrain, l'accès à la propriété,
une seule dimension du tableau d'index, ou seul paramètre personnalisé de l'indexeur
expressions
en ligne:
var partial = html.Partial("Item", new LabelEditorValidation() { Label = html.LabelFor(expression), Editor = html.EditorFor(expression), Validation = html.ValidationMessageFor(expression) }).ToString();
L'exception est lorsque @Html.MyEditFor
est appelé pour model.Age
.
@Html.MyEditFor(model=>model.Age)
Mais il ne se passe lorsque @Html.MyEditFor
est appelé pour model.EmpName
et model.Email
.
C'est parce que model.EmpName
et model.Email
sont des chaînes de caractères mais model.Age
est int
OriginalL'auteur Maxim Yefremov | 2013-02-04
Vous devez vous connecter pour publier un commentaire.
Vous pourriez faire de votre aide un peu plus générique et de se débarrasser de la
object
argument:Maintenant votre expression ne cassera pas comme il ne sera pas inutile de boxe.
OriginalL'auteur Darin Dimitrov
Pour la recherche Google, les utilisateurs,
Il suffit de ne pas appeler n'importe quel
Html.XyzFor
méthodes comme ceUtilisation
view models
au lieu de cela, appliquer queMyMethod
sur la propriété donnée.OriginalL'auteur VahidN