asp.net-mvc – 使用自己的HtmlHelper扩展名用于模型绑定的输入
我不满意当前的DropDownList实现,因为我不能真正做很多选项标签(仅选择,支持文本和值).我想让我自己的地方,我可以设置残疾人和其他东西在个人的选择.
目前我正在通过javascript改变选项,但我认为这是一个很好的方法,而我更愿意仅仅渲染正确的HTML来开始. 我知道我可以使用选择和选项标签的模板,并按照我想要的方式进行选择 – 但是正常的DropDownList扩展名会添加填充值和特定的名称和ID,我猜是提交表单时正确的数据绑定: <select data-val="true" data-val-number="The field SelectedValue must be a number." id="ParentDropDown_SelectedValue" name="ParentDropDown.SelectedValue"> 我如何去添加这些属性到我自己的模板? 解决方法
你是对的,那些属性(特别是name属性)对于模型绑定至关重要.
假设你想创建一个自定义帮助器 public static MvcHtmlString CustomHelperFor<TModel,TValue>(this HtmlHelper<TModel> html,Expression<Func<TModel,TValue>> expression) 首先你可以使用var fieldName = ExpressionHelper.GetExpressionText(expression);获取字段名称. 然后使用var fullBindingName = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(fieldName);以获得全名,照顾嵌套视图. 最后,您可以使用var fieldId = TagBuilder.CreateSanitizedId(fullBindingName);将其转换为id属性. 所以创建一个文本框的简单的自定义助手可以写成: public static MvcHtmlString CustomHelperFor<TModel,TValue>> expression) { var fieldName = ExpressionHelper.GetExpressionText(expression); var fullBindingName = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(fieldName); var fieldId = TagBuilder.CreateSanitizedId(fullBindingName); var metadata = ModelMetadata.FromLambdaExpression(expression,html.ViewData); var value = metadata.Model; TagBuilder tag = new TagBuilder("input"); tag.Attributes.Add("name",fullBindingName); tag.Attributes.Add("id",fieldId); tag.Attributes.Add("type","text"); tag.Attributes.Add("value",value == null ? "" : value.ToString()); var validationAttributes = html.GetUnobtrusiveValidationAttributes(fullBindingName,metadata); foreach (var key in validationAttributes.Keys) { tag.Attributes.Add(key,validationAttributes[key].ToString()); } return new MvcHtmlString(tag.ToString(TagRenderMode.SelfClosing)); } 您可以在以下视图中使用它: @Html.CustomHelperFor(model => model.ParentDropDown.SelectedValue) 并将产生以下html: <input id="ParentDropDown_SelectedValue" name="ParentDropDown.SelectedValue" type="text" value="4"> 希望有帮助! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 服务器端检测页面显示在IFrame中
- asp.net – ASPxComboBox,如何设置所选项?
- asp.net-mvc – 如何使用需要js的Kendo UI MVC Extensions?
- asp.net-mvc – F#Global.asax – 语言不受支持?
- ASP.net缓存绝对到期不工作
- 实体框架 – MVC3应用程序/服务层/存储库层/ POCO类/ EF4 –
- asp.net-mvc – 密码保护整个.net mvc应用程序?
- 你所不知道的ASP.NET Core MVC/WebApi基础系列 (二)
- asp.net-mvc-4 – Resharper无法解析主页中的部分视图
- asp.net – “’Microsoft.Jet.OLEDB.4.0’提供程序未在本地
- asp.net – GetGlobalResourceObject或Resources
- asp.net – 模型项的类型为CookMeIndexViewModel
- asp.net – 作为Windows服务托管的c#WCF Restful
- asp.net-mvc – 如何在json post期间发生异常时阻
- 展望asp.net core Blazor项目c#编译为原生WebAss
- asp.net – 从Controller构造器访问Request.Cook
- asp.net-mvc – Mono上的ASP.NET MVC
- asp.net-mvc-3 – 谷歌页内分析在我的ASP.NET MV
- asp.net-mvc – 如何使用MVC控制器返回JSON
- asp.net-mvc – 限制匿名访问ASP.Net MVC站点的问