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