0

ビュー モデルに適用するカスタム検証属性を作成しました。私のフォームでは、@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データ注釈バリデータを認識し、エラー メッセージを表示します。

Validation Summary を取得してカスタム エラー メッセージを表示するにはどうすればよいですか?

4

1 に答える 1

0

JsonResult内部に文字列だけを含むオブジェクトを返していますが"error"、MVC はクライアント側に表示する検証メッセージをどのように知ることができますか? 通常の投稿 ( を使用ActionResult) を使用する場合は、同じモデルを返すだけで、検証メッセージが表示されます。

return View(viewModel);

を使用して、コントローラーでオブジェクトを自分で検証し、JsonResultクラスを介してエラー メッセージを返すこともできます。return Json("error message here");

または、プロパティから検証エラー メッセージを取得しModelStateて、Json で返すこともできます。この質問の 2 番目の回答を確認してください。

于 2013-11-09T19:25:42.900 に答える