【发布时间】:2009-12-17 16:46:20
【问题描述】:
我正在尝试创建一个自定义 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, validationMessage, 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, validationMessage, errorHtmlAttributes).ToString();
}
return listItemBuilder.ToString(TagRenderMode.Normal);
}
您能帮我添加验证,以便这些输入文本框仍然是调用视图中发生的整体表单验证的一部分吗?我应该提一下,将 TextBox 和 ValidationMessage Helper 直接放在 View 中可以正常工作。
使用 HTML Helpers 有很多嗡嗡声(“如果有 IF,请使用帮助程序”任何人?),但是如果我们不能向我们使用的输入控件添加验证控件,我们应该如何使用它们.
提前感谢您的帮助。
【问题讨论】:
标签: asp.net-mvc validation html-helper