我正在尝试创建一个具有两个模型属性的HTML Helper。在下面的示例中,我的模型有两个字段Height和HeightUnit。助手中的代码将呈现一个Bootstrap文本框,其中包含输入组中单位的下拉列表。第一个模型属性绑定到文本框,第二个模型属性绑定到下拉列表。该代码在编译时不会出错,但是当它获得第二个表达式的显示名称时,它将失败并显示以下错误:
“模板只能与字段访问,属性访问,一维数组索引或单参数自定义索引器表达式一起使用。”
这是HTML Helper声明:
@Html.MaterialTextBoxFor(m => m.Height, m => m.HeightUnit)
这是我试图用来调用助手的剃刀代码:
WebAuthenticationOptions.None
有人知道怎么做吗?
答案 0 :(得分:0)
我最终找到了解决方案。关键是不要对数据源使用第二个表达式。而是将源作为模型中的项目创建,但将其直接传递给帮助程序。
public static MvcHtmlString CustomDropDownListFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression, List<SelectListItem> DataSource, object htmlAttributes = null)
在模型内部,您需要有两个字段,一个字段用于存储所选值,另一个字段用于保存源数据:
public string MyField{ get; set; }
public List<SelectListItem> MyFieldSource { get; set; }
然后您按如下方式呼叫助手:
@Html.CustomDropDownListFor(m => m.MyField, Model.MyFieldSource)
我在模型构造函数中填充“源”字段。