2

以前に同様の質問がありましたが(CustomValidationSummaryテンプレートAsp.netMVC 3)、どちらの回答も、ソリューションがクライアント側の検証を中断しないという追加の要件を満たしていません。

だから、誰かがこのような機能を取得する方法を知っていますか?

@if (!ViewData.ModelState.IsValid)
{
    <div class="form-errors">
        <p>Please have another look at the fields highlighted below</p>
        @Html.ValidationSummary()
    </div>
}

クライアント側の検証で機能しますか?

これは、クライアント側の検証がオフの場合に私が望むことを正確に実行します。つまり、モデルが有効な場合はdiv全体を除外し、エラーがある場合はそれを表示します。ただし、条件付きとは、評価がfalseのときにフォームが最初にレンダリングされるときに、セクション全体がレンダリングされないため、jquery.validateが検証の概要を挿入する場所を見つけることができないことを意味します。

何か案は?

4

1 に答える 1

3

ヘルパー:

    public static MvcHtmlString MyValidationSummary(this HtmlHelper helper, bool excludePropertyErrors = false)
    {
        string html = "";

        html += helper.ViewData.ModelState.IsValid ? "<div class='form-errors' style='display:none;'>" : "<div class='form-errors'>";

        html += "<p>Please have another look at the fields highlighted below</p>";
        html += helper.ValidationSummary(excludePropertyErrors);
        html += "</div>";

        return new MvcHtmlString(html);
    }

意見:

@using (Html.BeginForm("Index", "Home",FormMethod.Post, new {id="myform"}))
{
    @Html.MyValidationSummary()
    ...
    <input type="button" id="submitbutton" value="Submit" />
}

JS:

$("#submitbutton").click(function () {
    $("#myform").validate();

    if (!$("#myform").valid()) {
        $("#myform .form-errors").show();
    }
    else {
        $("#myform").submit();
    }
});

アップデート:

部分ビューで行きたい場合

Shared / _MyValidationSummary.cshtml

@if (!ViewData.ModelState.IsValid)
{
    <div class="form-errors">
        <p>Please have another look at the fields highlighted below</p>
        @Html.ValidationSummary()
    </div>
}
else
{
    <div class="form-errors" style="display:none;">
        <p>Please have another look at the fields highlighted below</p>
        @Html.ValidationSummary()
    </div>
}

意見:

@using (Html.BeginForm("Index", "Home",FormMethod.Post, new {id="myform"}))
{
    @Html.Partial("_MyValidationSummary")
    ...
    <input type="button" id="submitbutton" value="Submit" />
}
于 2012-11-22T12:00:08.940 に答える