asp.net-mvc C 如何在我自己的自定义助手中使用ASP.NET MVC ValidationMessage H
HTML Helper,它封装了一些表示逻辑,因为我必须在同一页面上以及将来重复使用这个逻辑几次.
如果用户的地址在北美,那么我希望为电话号码输入显示两个文本
我正在尝试创建一个自定义的 HTML Helper,它封装了一些表示逻辑,因为我必须在同一页面上以及将来重复使用这个逻辑几次. 如果用户的地址在北美,那么我希望为电话号码输入显示两个文本框,一个用于区号,另一个用于剩余的数字.如果地址在北美之外,那么我想要一个单独的文本框来显示完整的数字. 下面的代码按预期工作输出正确的文本框,但是,只要我添加了与每个文本框关联的验证,我现在从ValidationMessage Helper调用的ToString()调用中抛出NullReferenceException(ValidationMessage)帮助者返回空值!!). public static string TelephoneNumberInputListItem(this HtmlHelper helper,string country,string northAmericanAreaCodeFormName,string northAmericanAreaCode,string northAmericanRemainingNumberFormName,string northAmericanRemainingNumber,string internationalFullNumberFormName,string internationalFullNumber) { //set up the error message and styling object errorHtmlAttributes = new { @class = "fError" }; string validationMessage = "*"; object htmlAttributes; //start building our list item tag which includes our telephone number //input and validation controls TagBuilder listItemBuilder = new TagBuilder("li"); //determine based on the country specified if this should be a North //American phone input form or an international one if (isNorthAmericanCountry(country)) { //add the text input controls htmlAttributes = new { size = 3,maxlength = 3 }; listItemBuilder.InnerHtml = helper.TextBox(northAmericanAreaCodeFormName,northAmericanAreaCode,htmlAttributes).ToString(); htmlAttributes = new { size = 7,maxlength = 7 }; listItemBuilder.InnerHtml += helper.TextBox(northAmericanRemainingNumberFormName,northAmericanRemainingNumber,htmlAttributes).ToString(); //Add the Validation Message controls listItemBuilder.InnerHtml += helper.ValidationMessage(northAmericanAreaCodeFormName,validationMessage,errorHtmlAttributes).ToString(); listItemBuilder.InnerHtml += helper.ValidationMessage(northAmericanRemainingNumberFormName,errorHtmlAttributes).ToString(); } else { //add the text input control htmlAttributes = new { size = 15,maxlength = 15 }; listItemBuilder.InnerHtml = helper.TextBox(internationalFullNumberFormName,internationalFullNumber,htmlAttributes).ToString(); //Add the Validation Message control listItemBuilder.InnerHtml += helper.ValidationMessage(internationalFullNumberFormName,errorHtmlAttributes).ToString(); } return listItemBuilder.ToString(TagRenderMode.Normal); }你能否帮我添加验证,以便这些输入文本框仍然是调用View中发生的整体表单验证的一部分?我应该提一下,将TextBox和ValidationMessage Helper直接放在View中可以正常工作. 使用HTML Helpers有很多嗡嗡声(“如果有IF,请使用助手”任何人?),但是如果我们不能将验证控件添加到我们使用的输入控件中,我们应该如何使用它们. 预先感谢您的帮助. 解决方法 如果相应的模型状态中没有指示错误,则ValidationMessage帮助程序返回null.看下面的实际代码……由于ValidationMessage助手返回一个字符串,因此没有理由调用ToString()(导致异常的原因).删除ToString,您的代码应该按预期工作. 您也可以从TextBox助手中删除ToString调用. public static string ValidationMessage(this HtmlHelper htmlHelper,string modelName,string validationMessage,IDictionary<string,object> htmlAttributes) { if (modelName == null) { throw new ArgumentNullException("modelName"); } if (!htmlHelper.ViewData.ModelState.ContainsKey(modelName)) { return null; } ModelState modelState = htmlHelper.ViewData.ModelState[modelName]; ModelErrorCollection modelErrors = (modelState == null) ? null : modelState.Errors; ModelError modelError = ((modelErrors == null) || (modelErrors.Count == 0)) ? null : modelErrors[0]; if (modelError == null) { return null; } TagBuilder builder = new TagBuilder("span"); builder.MergeAttributes(htmlAttributes); builder.MergeAttribute("class",HtmlHelper.ValidationMessageCssClassName); builder.SetInnerText(String.IsNullOrEmpty(validationMessage) ? GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext,modelError,modelState) : validationMessage); return builder.ToString(TagRenderMode.Normal); }(编辑:十堰站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 模型单元测试能否真正独立,如何[ASP.NET MV
- asp.net-mvc – 在MVC ActionLink中使用Knockout绑定
- ASP.NET Core 1.0 ConfigurationBuilder().AddJsonFile(“a
- asp.net-mvc – 在asp.net mvc 3剃刀中识别html助手的问题
- asp.net-mvc – Mvc 3 Razor:使用部分部分视图?
- 隐藏ASP.NET菜单项
- ASP.NET 2.0 JQuery AJAX登录
- 如何刷新#include文件 – 它们在IIS7 / ASP.NET上进行缓存
- asp.net – Silverlight初始化错误2110 Internet Explorer
- asp.net-mvc – 在MVC Controller中访问GET参数
- asp.net – Ajax Control Toolkit正在加载太多脚
- asp.net – 干净的方式来防止输入按钮提交表单
- ASP.NET通过自定义函数实现对字符串的大小写切换
- asp.net-mvc-4 C 在EF迁移配置类的Seed方法中获取
- asp.net-mvc-2 – 在名称中使用连字符处理MVC2变
- iis-7 C ASP 3.0应用程序对象
- Asp.Net Core中WebSocket绑定的方法详解
- asp.net-mvc – 使用Viewbag绑定DropdownlistFor
- asp.net-mvc – 如何阻止用户在MVC3应用程序上登
- asp.net-mvc – ControllerActionInvoker
- asp.net-core C 如何使用ASP.NET注册OData
- asp.net C MVC4 C ContextDependentView C
- asp.net-mvc-3 C 如何从ASP.NET MVC#输出中
- asp.net-mvc C 已经使用相同的参数类型定义
- ASP.Net C AJAX UpdatePanel中的Javascript
- asp.net-mvc C ASP.NET MVC中的WebApi [Fro
- asp.net-mvc C 使用AD的ASP.NET MVC表单Aut
- asp.net C 适用于多个用户的EWS通知中心
- asp.net-mvc C 未在ELMAH中记录的错误
- asp.net-mvc C MVC应用程序中的随机数生成