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 Web API将http响应转换为json数组
- ASP.NET RadioButton混淆名称(组名)
- asp.net-mvc – 断言操作重定向到正确的操作/路由?
- asp.net-mvc – 使用AutoMapper的控制器上的单元测试
- 嵌套的ASP.NET’应用程序’在IIS内继承父配置值?
- asp.net-mvc – ASP.NET MVC中的视图文件/目录结构应该是什
- asp.net – 无法加载mysql.web程序集
- asp.net-mvc – TDD:在ASP.NET MVC 3中测试DataAnnotation
- asp.net-mvc – 所有请求获取HTTP错误401.2 – 未经授权的响
- asp.net – asmx webservices与REST兼容?
- asp.net-mvc-4 – ASP.NET MVC 4通过ActionLink传
- asp.net-mvc-3 – 无效的匿名类型成员声明符 必须
- asp.net-mvc – 从ModelMetaData获取另一个属性的
- 缓存 – 实体框架的缓存查询5
- asp.net-mvc-4 – Elmah.MVC 2.0.1 – 保护elmah
- asp.net-mvc – IE10将令牌注入到.NET MVC链接中
- ASP.NET MVC页面不会加载并说“找不到资源”
- asp.net-mvc – 将变量与静态html连接起来的语法
- 为什么默认的ASP.NET Forms认证Cookie在其默认名
- 我可以在.NET中设置IIS MIME类型吗?
