好吧,假設您的視圖有四個部分(每個都有獨立的視圖模型),它們都與主視圖模型相關聯。你點擊提交和你的所有數據文章。您運行一些服務器端驗證,您注意到驗證錯誤發生在4個部分中的3個字段中。所以,我想回發驗證錯誤,但高於他們所屬的部分。ASP.NET MVC用戶消息傳遞實現
你有什麼實現想法?
好吧,假設您的視圖有四個部分(每個都有獨立的視圖模型),它們都與主視圖模型相關聯。你點擊提交和你的所有數據文章。您運行一些服務器端驗證,您注意到驗證錯誤發生在4個部分中的3個字段中。所以,我想回發驗證錯誤,但高於他們所屬的部分。ASP.NET MVC用戶消息傳遞實現
你有什麼實現想法?
不同的問題,同樣的解決方案:
有趣的場景。如果我理解正確:您想要驗證複雜的表單帖子,並且無效,請將其返回到視圖並在各自表單區域上方顯示錯誤消息。您無法使用<%= Html.ValidationSummary()%>的原因是,您需要對錶單的不同區域使用不同的摘要,具體取決於什麼是有效的,哪些不是?
帶上一粒鹽,但我會做的是寫一個自定義的HtmlHelper爲每個表單區域或部分。您可以將您的自定義代碼基於Html.ValidationSummary的當前實現並找到代碼here。在每個自定義驗證摘要中,您都可以在ModelState中查找特定錯誤並顯示這些錯誤。我沒有太多的時間,還沒有測試,但是這可能讓你開始:
public static class CustomValidationExtensions
{
public static string CustomValidationSummary(this HtmlHelper htmlHelper)
{
if (!htmlHelper.ViewData.ModelState.ContainsKey("YourFormName"))
return null;
ModelState modelState = htmlHelper.ViewData.ModelState["YourFormName"];
ModelErrorCollection modelErrors = (modelState == null) ? null : modelState.Errors;
ModelError modelError = ((modelErrors == null) || (modelErrors.Count == 0)) ? null : modelErrors[0];
if (modelError == null)
return null;
TagBuilder builder = new TagBuilder("span");
builder.MergeAttribute("class", HtmlHelper.ValidationMessageCssClassName);
builder.SetInnerText(modelError.ErrorMessage);
return builder.ToString(TagRenderMode.Normal);
}
}
這隻能檢查一個ModelState中元素和顯示一些HTML。您需要手動添加所有的ModelState元素,或者循環播放集合,並僅顯示適用於該部分視圖的錯誤消息。無論哪種方式,我覺得你最好的選擇是向ModelState添加錯誤的典型方法,並直接使用ModelState來顯示適用於該部分的錯誤。當然,您可以操作html並根據您的輸出做任何事情。