多个Lambda表达式作为MVC HTML帮助器参数?

时间:2019-02-16 04:01:05

标签: c# asp.net-mvc razor lambda html-helper

我正在尝试创建一个具有两个模型属性的HTML Helper。在下面的示例中,我的模型有两个字段Height和HeightUnit。助手中的代码将呈现一个Bootstrap文本框,其中包含输入组中单位的下拉列表。第一个模型属性绑定到文本框,第二个模型属性绑定到下拉列表。该代码在编译时不会出错,但是当它获得第二个表达式的显示名称时,它将失败并显示以下错误:

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

这是HTML Helper声明:

@Html.MaterialTextBoxFor(m => m.Height, m => m.HeightUnit)

这是我试图用来调用助手的剃刀代码:

WebAuthenticationOptions.None

有人知道怎么做吗?

1 个答案:

答案 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)

我在模型构造函数中填充“源”字段。