在ModelState.AddModelError()

时间:2017-03-05 14:32:36

标签: asp.net-core asp.net-core-mvc asp.net-core-1.1

在我的ASP.NET核心控制器中,我做了一些重复检查。当用户尝试创建已存在的实体时,他应该收到一条错误消息,其中包含指向重复条目的编辑页面的链接。所以我想在消息中设置此链接,使用ModelState.AddModelError设置,如下所示:

if(entryIsDuplicate) {
    ModelState.AddModelError("Testfield", "Duplicate entry: View it <a href=\"" + Url.Action("Edit", new { id = existingEntry.Id }) + "\">here</a>");
}

由于出于安全原因,ASP.NET Core默认会转义所有HTML,因此无法实现。我不能简单地使用@Html.Raw(),因为它是一个像这样的HTML帮助器:

<span asp-validation-for="Testfield"></span>

作为解决方法,我自己手动阅读错误消息

var testfieldError = ViewData.ModelState.Where(x => x.Value.Errors.Count > 0 && x.Key == nameof(Model.Testfield))
    .SelectMany(x => x.Value.Errors.Select(y => y.ErrorMessage))
    .ToList();

if (testfieldError != null &&  testfieldError.Count > 0) {
    var errorMessage =  testfieldError.First();
    <span class="field-validation-error" data-valmsg-for="@nameof(Model.Testfield)" data-valmsg-replace="true">@Html.Raw(errorMessage)</span>
}

但是使用默认的标签助手来获得更通用的解决方案会更好。这是可能的,还是我必须编写自己的标记助手,如asp-html-validation-for

0 个答案:

没有答案