2
我编写了自己的HtmlHelper扩展方法来显示时间输入。未将输入验证错误类添加到自定义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");
}
感谢您的回复,这真是个巧合哈哈!我自己写了一些我发现的脚本。我使用了DataType.Time,但有些事情在我的日期和时间里并没有解决。如果我没有记错,我无法设置默认日期或最小/最大日期。感谢您的帮助和有用的源代码。 – P1nGu1n