簡體   English   中英

DataAnnotations DisplayAttributes Order屬性在MVC中不起作用

[英]DataAnnotations DisplayAttributes Order property is not working in MVC

我在模型對象中設置DataAnnotations DisplayAttributes Order屬性的值。 但是,它似乎不起作用。

我使用的是.Net Framework 4.7和MVC5。按照下面的鏈接,它應該可以工作。

https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations.displayattribute.order?view=netframework-4.7.2

    [Required(ErrorMessage = "Case is required.")]
    [Display(Name = "Case", Order = -98)]
    public int CaseId { get; set; }

    [Required(ErrorMessage = "Phase is required.")]
    [Display(Name = "Phase", Order = -99)]
    public int PhaseId { get; set; }

由於默認的訂單權重是0,因此我使用負值將其設置為所需的順序。 無論我指定什么訂單權重,驗證消息始終以模型中屬性聲明的順序顯示。

有什么建議或建議嗎?

提前致謝。

DisplayAttribute控制顯示中列的順序,而不是驗證消息的順序。

您可以嘗試將錯誤消息放在控件旁邊,如從控制器asp.net mvc 5在視圖上的“顯示錯誤消息”中所述。

這有助於重新排列錯誤消息的順序。

@ Html.ValidationSummary()-如何設置錯誤消息的順序

控制器代碼:

   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>
}

希望這對其他人有幫助。 謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM