asp.net-mvc – MVC3 TextBoxFor与EditorFor – 每个问题
我已经浏览了一段时间的网络,但无法找到解决我具体问题的好方法.我正在研究MVC3 Razor应用程序.我在客户端使用jQuery做了很多东西,所以在这种情况下我需要输入字段才能拥有html Id属性.
在此特定问题中,当我使用TextBoxFor显示货币(类型为十进制)时,该值呈现4个小数位(我只想要2).我输入了模型属性 [DisplayFormat(DataFormatString =“{0:n2}”,ApplyFormatInEditMode = true)] 当它呈现它似乎忽略这个“displayFormat”.我在网上看到其他帖子确认TextBoxFor html助手存在这个问题. 另一方面,我可以更改为使用EditorFor html帮助器,并且DisplayFormat模型属性适用于将我的文本框值格式化为2个小数位.缺点是我没有能力将html属性应用到我需要jQuery的html帮助器.什么是两全其美的最好方法?我已经看到了一些变通方法,但似乎必须有一种更简单的方法来做到这一点. 作为旁注,我的特定项目要求我的大多数字段都有html Id属性,有时还有类,所以我可以执行客户端jQuery操作.不确定这是否意味着我应该专注于扩展EditorFor html帮助器以便也接受html属性. 解决方法
DisplayFormat仅供MVC用于razor的任何Display扩展方法. (比如DisplayFor)不幸的是,做你想做的事你就得写一些“手工”代码……这是一个让你前进的例子.它基本上重现了TextBoxFor代码,但做出了一些很可能对生产不利的假设.请注意下面的displayText分配,这是我们真正关心您在DisplayFormat中设置的DisplayFormatString的位置.
在您的视图中调用它@ Html.TextEditorFor(m => m.Value) public static class CustomEditorFor { public static IHtmlString TextEditorFor<TModel,TProperty>(this HtmlHelper<TModel> helper,Expression<Func<TModel,TProperty>> expression,object htmlAttributes) { return TextEditorFor(helper,expression,HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); } public static IHtmlString TextEditorFor<TModel,IDictionary<string,object> htmlAttributes) { ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression,helper.ViewData); object value = metadata.Model; string displayText = string.Format(metadata.DisplayFormatString,value); string fullName = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression)); TagBuilder tagBuilder = new TagBuilder("input"); tagBuilder.MergeAttributes(htmlAttributes); tagBuilder.MergeAttribute("type","text"); tagBuilder.MergeAttribute("name",fullName,true); tagBuilder.MergeAttribute("value",displayText); tagBuilder.GenerateId(fullName); ModelState modelState; if (helper.ViewData.ModelState.TryGetValue(fullName,out modelState)) { if (modelState.Errors.Count > 0) { tagBuilder.AddCssClass(HtmlHelper.ValidationInputCssClassName); } } tagBuilder.MergeAttributes(helper.GetUnobtrusiveValidationAttributes(ExpressionHelper.GetExpressionText(expression),metadata)); return new HtmlString(tagBuilder.ToString(TagRenderMode.SelfClosing)); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在MVC3中使用Html.BeginForm是什么
- asp.net-mvc-3 – ASP.NET AJAX.BeginForm发送多个请求
- asp.net-core – 使用asp.net核心发布视图
- asp.net-mvc-3 – 企业中业务实体验证的首选方法
- ASP.NET ListView:如何在每个N项中插入“特殊”项?
- asp.net – 新的dotnet核心项目无法恢复
- asp.net – DataAnnotation [DataType(DataType.Date)]使我
- 为什么MVC而不是好的旧ASP.NET?还没有抓住为什么要走这条路
- asp.net-mvc – MVC HandleError过滤器没有捕获异常
- asp.net – “连接字符串指定本地Sql Server Express实例”
- asp.net-core – 从Controller传递信息到中间件
- asp.net – 设置Orchard开发工作区
- asp.net-mvc – Asp.Net MVC Ajax.BeginForm没有
- templates – CheckBoxList多个选择:如何建模绑
- asp.net – Devexpress网格延迟加载
- asp.net-mvc – ViewData Dictionary的范围是什么
- asp.net – viewstate到期了吗?
- asp.net-mvc – 可从全局路由访问的ASP.NET MVC3
- asp.net-mvc – 在控制器名称和路由中使用破折号
- 最好的TinyMce编辑器图像管理器/文件上传为Asp.n