模板只能与字段访问、属性访问、一维数组索引或单参数自定义索引器表达式一起使用

2024-03-14

我的型号:

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; }

}

在我看来:

 @Html.MyEditFor(model=>model.EmpName)
 @Html.MyEditFor(model=>model.Email)
 @Html.MyEditFor(model=>model.Age)

我的自定义助手:

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);
    }

Item.cshtml - 部分视图:

 @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 - Item.cshtml 的模型:

      public class LabelEditorValidation
{
    public MvcHtmlString Validation { get; set; }
    public MvcHtmlString Label { get; set; }
    public MvcHtmlString Editor { get; set; }
}

我有例外

模板只能用于字段访问、属性访问、 单维数组索引,或单参数自定义索引器 表达式

on line:

    var partial = html.Partial("Item", new LabelEditorValidation() { Label = html.LabelFor(expression), Editor = html.EditorFor(expression), Validation = html.ValidationMessageFor(expression) }).ToString();

异常发生在以下情况:@Html.MyEditFor被要求model.Age.

 @Html.MyEditFor(model=>model.Age) 

但它不会发生当@Html.MyEditFor被要求model.EmpName and model.Email。 那是因为model.EmpName and model.Email是字符串但是model.Age is int


对于 Google 搜索用户, 只是不要打电话给任何人Html.XyzFor像这样的方法

@Html.CheckBoxFor(model => model.Property***.MyMethod()***)

Use view models相反,应用它MyMethod在给定的属性上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

模板只能与字段访问、属性访问、一维数组索引或单参数自定义索引器表达式一起使用 的相关文章

随机推荐