如何向我的自定义 HtmlHelper 添加验证消息?
我有一个使用数据注释的类:
[Required(ErrorMessage = "You must indicate which sex you are.)]
public string Sex { get; set; }
我还创建了一个名为 RadioButtonListFor 的自定义 HtmlHelper,我可以这样调用它:
@Html.RadioButtonListFor(m => m.Sex, "SexList")
我的 SexList 定义如下:
IList<string> SexList = new List() { "Male", "Female"};
下面是 RadioButtonListFor 扩展(尚未完全完成):
public static class RadioButtonListForExtentions
{
public static IHtmlString RadioButtonListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string list)
{
string prefix = ExpressionHelper.GetExpressionText(expression);
if (string.IsNullOrEmpty(prefix))
prefix = "empty";
int index = 0;
var items = helper.ViewData.Eval(list) as IEnumerable;
if (items == null)
throw new NullReferenceException("Cannot find " + list + "in view data");
string txt = string.Empty;
foreach (var item in items)
{
string id = string.Format("{0}_{1}", prefix, index++).Replace('.','_');
TagBuilder tag = new TagBuilder("input");
tag.MergeAttribute("type", "radio");
tag.MergeAttribute("name", prefix);
tag.MergeAttribute("id", id);
tag.MergeAttribute("data-val-required", "Missing");
tag.MergeAttribute("data-val", "true");
txt += tag.ToString(TagRenderMode.Normal);
txt += item;
}
return helper.Raw(txt);
}
}
我的问题是这样的:现在我已经在属性“data-val-required”中硬编码了“Missing”这个词。如何获取我在数据注释中所述的文本?
I have a class where I have used data annotations:
[Required(ErrorMessage = "You must indicate which sex you are.)]
public string Sex { get; set; }
I have also created a custom HtmlHelper called RadioButtonListFor, which I can call like this:
@Html.RadioButtonListFor(m => m.Sex, "SexList")
My SexList is defined like this:
IList<string> SexList = new List() { "Male", "Female"};
And below is the RadioButtonListFor extension (not totally finished yet):
public static class RadioButtonListForExtentions
{
public static IHtmlString RadioButtonListFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, string list)
{
string prefix = ExpressionHelper.GetExpressionText(expression);
if (string.IsNullOrEmpty(prefix))
prefix = "empty";
int index = 0;
var items = helper.ViewData.Eval(list) as IEnumerable;
if (items == null)
throw new NullReferenceException("Cannot find " + list + "in view data");
string txt = string.Empty;
foreach (var item in items)
{
string id = string.Format("{0}_{1}", prefix, index++).Replace('.','_');
TagBuilder tag = new TagBuilder("input");
tag.MergeAttribute("type", "radio");
tag.MergeAttribute("name", prefix);
tag.MergeAttribute("id", id);
tag.MergeAttribute("data-val-required", "Missing");
tag.MergeAttribute("data-val", "true");
txt += tag.ToString(TagRenderMode.Normal);
txt += item;
}
return helper.Raw(txt);
}
}
My problem is this: Right now I have hardcoded the word "Missing" in the attribute "data-val-required". How do I get the text I stated in my data annotations?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
啊...在睡个好觉后我自己找到了解决方案:-)
用以下内容替换 RadioButtonListFor:
基本上我添加了“validationAttributes”,它显然是我的验证项的字典。循环遍历这些并添加它们使其工作起来就像一个魅力!
2011 年 10 月 13 日编辑:
最终得到以下解决方案。我决定发送一个字典,其中键是单选按钮值,字典的值是单选按钮文本,而不是仅仅获取字符串列表。
Ah... found the solution myself, after a good nights sleep :-)
Replacing the RadioButtonListFor with the below:
Basically I have added "validationAttributes" which apparently is a dictionary of my validation items. And looping through these and adding them makes it work like a charm!
Edited October 13th 2011:
Ended up with the below solution. Instead of just getting a list of strings, I decided to send in a Dictionary where the key is the radiobutton value and the value of the dictionary is the radiobutton text.