在我的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
?