我正在模型对象中设置DataAnnotations DisplayAttributes Order属性的值。但是,它似乎不起作用。
我使用的是.Net Framework 4.7和MVC5。按照下面的链接,它应该可以工作。
[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,所以我使用负值将其设置为所需的顺序。不管我指定什么订单权重,验证消息始终按照模型中属性声明的顺序显示。
有什么建议或建议吗?
谢谢。
答案 0 :(得分:1)
DisplayAttribute控制显示中列的顺序,而不是验证消息的顺序。
您可以尝试按照Display error message on the view from controller asp.net mvc 5
中的说明将错误消息放在控件旁边。答案 1 :(得分:0)
这有助于重新排列错误消息的顺序。
@Html.ValidationSummary() - how to set order of error messages
控制器代码:
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>
}
希望这对其他人有帮助。 谢谢!