Asp.net mvc 为使用模型绑定的输入创建自己的HtmlHelper扩展

Asp.net mvc 为使用模型绑定的输入创建自己的HtmlHelper扩展,asp.net-mvc,html-helper,mvc-editor-templates,Asp.net Mvc,Html Helper,Mvc Editor Templates,我对当前的DropDownList实现不满意,因为我不能真正使用选项标签(只支持selected、text和value)。我想做我自己的,我可以设置禁用和个人选项上的其他东西 目前,我正在用javascript修改选项,但我认为这是一种有点黑客的方式,我更愿意从呈现正确的html开始 我知道我可以制作一个使用select和option标记的模板,并根据我的需要制作选项-但是普通的DropDownList扩展添加了stuff val stuff和一个特定的名称和ID,我猜这是为了在提交表单时进行正

我对当前的DropDownList实现不满意,因为我不能真正使用选项标签(只支持selected、text和value)。我想做我自己的,我可以设置禁用和个人选项上的其他东西

目前,我正在用javascript修改选项,但我认为这是一种有点黑客的方式,我更愿意从呈现正确的html开始

我知道我可以制作一个使用select和option标记的模板,并根据我的需要制作选项-但是普通的DropDownList扩展添加了stuff val stuff和一个特定的名称和ID,我猜这是为了在提交表单时进行正确的数据绑定:

<select data-val="true" data-val-number="The field SelectedValue must be a number." id="ParentDropDown_SelectedValue" name="ParentDropDown.SelectedValue">


如何将这些属性添加到我自己的模板中?

没错,这些属性(特别是名称属性)对于模型绑定至关重要

假设您想创建一个自定义帮助器,如

public static MvcHtmlString CustomHelperFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
您可以在以下视图中使用它:

@Html.CustomHelperFor(model => model.ParentDropDown.SelectedValue)
它将生成以下html:

<input id="ParentDropDown_SelectedValue" name="ParentDropDown.SelectedValue" type="text" value="4">


希望有帮助

这可能是重复的:你是对的,他想要同样的结果。我还没找到。但是我不喜欢里面的答案,因为它看起来也有点粗糙。我要尝试一下丹尼尔·J·G.的答案,因为它看起来就像我想要的那样。谢谢!这对我帮助很大。现在我只需要弄清楚如何将其数据绑定到模型的属性。我有一个模型,它用选项和选定值表示整个DropDownList。我由此生成html,并需要将该值数据绑定到SelectedValue属性。我想我应该考虑创建一个符合该属性的名称和/或id。@Inrego,很高兴听到:)我已经更新了我的答案,其中包含了一些逻辑,可以在呈现的html中包含数据注释验证属性。谢谢。我很想知道,但我想我可以没有它,因为仍然会有服务器端验证。谢谢,这是一个很大的帮助。我只是想知道你为什么要通过一个表达。您能传入模型对象并使绑定仍然有效吗?
<input id="ParentDropDown_SelectedValue" name="ParentDropDown.SelectedValue" type="text" value="4">