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