【发布时间】:2014-03-25 00:28:35
【问题描述】:
我编写了自己的 HtmlHelper 扩展方法来显示时间输入。
public static MvcHtmlString TimePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
if (expression == null)
{
throw new ArgumentNullException("expression");
}
string expressionText = ExpressionHelper.GetExpressionText(expression);
string value = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData).Model.ToString();
return TimePicker(htmlHelper, expressionText, value);
}
public static MvcHtmlString TimePicker(this HtmlHelper helper, string name, string value)
{
TagBuilder builder = new TagBuilder("input");
builder.MergeAttribute("type", "time");
builder.MergeAttribute("id", name);
builder.MergeAttribute("name", name);
if (value != null)
{
builder.MergeAttribute("value", value);
}
return MvcHtmlString.Create(builder.ToString(TagRenderMode.SelfClosing));
}
我就是这样使用它的:
@Html.TimePickerFor(model => model.StartTime)
当时间无效时,我添加如下错误:
ModelState.AddModelError("StartTime", "The selected time is already taken.");
添加此错误时,它应该将input-validation-error 类添加到输入中,但它没有。我无法让它工作。它确实在ValidationSummary 中显示了错误,并将该类添加到默认输入中。任何帮助将不胜感激!
我已经尝试像这样添加它,但这仍然不会添加类:
var validation = helper.GetUnobtrusiveValidationAttributes(name);
foreach (KeyValuePair<string, Object> attribute in validation)
{
builder.MergeAttribute(attribute.Key, attribute.Value.ToString());
}
编辑:找到临时解决方法,但仍无法解决问题
ModelState modelState;
if (helper.ViewData.ModelState.TryGetValue(name, out modelState))
{
if (modelState.Errors.Count > 0)
builder.AddCssClass("input-validation-error");
}
【问题讨论】:
标签: c# validation asp.net-mvc-4 html-helper