簡體   English   中英

Html.ValidationSummary中不顯示自定義驗證錯誤消息

[英]Custom validation error message doesn't display in Html.ValidationSummary

我創建了一個自定義驗證屬性以應用於我的視圖模型。 在我的表單中,我有一個@Html.ValidationSummary控件。 當我的自定義驗證屬性無效時,由於某些原因,摘要控件不會顯示錯誤消息。

這是我的自定義驗證器:

public class UserFolderExistsAttribute : ValidationAttribute
{
    private const string _defaultErrorMessage = 
        "A folder with this name already exists";
    private readonly object _typeId = new object();

    public UserFolderExistsAttribute(string folderName) :
        base(_defaultErrorMessage)
    {
        FolderName = folderName;
    }

    public string FolderName { get; private set; }
    public override object TypeId { get { return _typeId; } }

    public override bool IsValid(object value)
    {
        return false; // return error message to test for now
    }
}

這是我的視圖模型,應用了我的自定義驗證器屬性:

[UserFolderExists("Name")]
public class UserFolderViewModel
{
    [Required(ErrorMessage = "Name is required")]
    public string Name { get; set; }
}

這是我的部分觀點:

@using (Ajax.BeginForm("Create", "Folders",
    new AjaxOptions { OnSuccess = "OnSuccess" }))
{
    @Html.AntiForgeryToken()

    @Html.TextBoxFor(m => m.Name, new { placeholder = "Name" })

    <p>@Html.ValidationSummary()</p>

    <p><input type="submit" class="create" value="" /></p>
}

這是我的表單發布到的方法:

[HttpPost]
public JsonResult Create(UserFolderViewModel viewModel)
{
    if (ModelState.IsValid)
    {
        // do something
    }

    return Json("error");  
}

ModelState.IsValid屬性返回false,因此可以識別我的自定義驗證器。 但是摘要控件不會自動顯示我的消息。 摘要不會識別“ Required數據注釋驗證器”,並顯示錯誤消息。

如何獲得驗證摘要以顯示我的自定義錯誤消息?

您將返回一個JsonResult對象,其中僅包含一個字符串"error" ,MVC如何才能知道要在客戶端顯示的驗證消息? 如果您使用普通的發布(與ActionResult ),則可以返回相同的模型,並且將顯示驗證消息:

return View(viewModel);

您也可以自己在控制器中驗證對象,並使用return Json("error message here");通過JsonResultreturn Json("error message here");

或者,您可以嘗試從ModelState屬性獲取驗證錯誤消息,並使用Json返回它們。 查看此問題的第二個答案。

暫無
暫無

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

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