2015-06-11 23 views
1

我有三個表單元素。我們會稱它們爲RadioA,RadioB和Dropdown。在模型中,它們按照該順序創建,並按順序顯示在視圖中,並根據需要爲每個視圖指定唯一的錯誤消息。然後在視圖中,我使用:@ Html.ValidationSummary() - 如何設置錯誤消息的順序

@Html.ValidationSummary() 

但錯誤信息回來:

  • 下拉需要
  • RadioA需要
  • RadioB需要

On this thread ,我知道我們對這些錯誤消息的順序沒有太大的控制CK。有幾個人就如何破解這個問題提出了建議,但我無法讓他們中的任何一個人工作。

任何想法?我應該只使用jQuery並以舊式方式驗證每個表單項嗎?

回答

1

我站好了。 mhapps提供的答案就像一個魅力。這是最後的答案。我引用他:

我遇到了這個問題,爲了快速解決問題,我重新創建了上面的驗證摘要,並使用ViewBag通過引用有序字段名稱的數組以正確的順序存儲錯誤。不是特別好,但是當時我能想到的最快的事情。剃刀/ MVC3。

控制器代碼:

List<string> fieldOrder = new List<string>(new string[] { 
"Firstname", "Surname", "Telephone", "Mobile", "EmailAddress" }) 
.Select(f => f.ToLower()).ToList(); 

ViewBag.SortedErrors = ModelState 
    .Select(m => new { Order = fieldOrder.IndexOf(m.Key.ToLower()), Error = m.Value}) 
    .OrderBy(m => m.Order) 
    .SelectMany(m => m.Error.Errors.Select(e => e.ErrorMessage)) 
    .ToArray(); 

然後在視圖:

@if (!ViewData.ModelState.IsValid) 
{ 
    <div class="validation-summary-errors"> 
    <ul> 
     @foreach (string sortedError in ViewBag.SortedErrors) 
     { 
      <li>@sortedError</li> 
     } 
    </ul> 
    </div> 
} 
1

我想這樣做的更好的辦法是你爲了你的模型屬性以相同的順序,你會喜歡顯示您的驗證消息:

public class Ingredients 
{ 
    [Required] 
    public string Vegetable { get; set; } 
    [Required] 
    public string Starch { get; set; } 
    [Required] 
    public string Meat { get; set; } 
    [Required] 
    public string Fruit { get; set; } 
    } 

這將在以下顯示消息ng order:

  • 需要Vegetable字段。
  • 需要澱粉字段。
  • 肉類是必填項。
  • 水果字段是必需的。

相關問題