1

RenderPartial タグを含むビューがあります。部分ビュー内にフォームがありますが、サーバー要求の前にクライアント側のフォーム検証が起動しません。サーバー側の検証は正常に機能しています。私は他のビューを持っていますが、完全に機能するRenderPartialsがないので奇妙です。RenderParial を含めると、検証が機能しなくなるようです。

ところで - 私は両方の webconfig 設定を true に設定しました:

<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />

また、[必須] 属性を含むようにモデルが更新されました。ここにスナップショットがあります:

[Required]
[CreditCard]
public string CardNumber { get; set; }

[Required]
[Display(Name = "Name on card")]
public string CardHolder { get; set; }

[Required]
public string Address { get; set; }

親スニペットは次のとおりです。

@if (ViewBag.tabvalue.Equals("billing"))
{
<div>
    <p>
        @{Html.RenderPartial("_BillingInfo");}
    </p>
</div>
}

これが子の部分ビューです (コピーの量を減らすためにいくつかのフィールドを削除しました):

@model MVC4.Models.ClientCreditCard

@using (Html.BeginForm("CreditCard", "Client", FormMethod.Post, new { }))
{
    @Html.AntiForgeryToken()

    <fieldset style="color:white">
        <legend></legend>
        <div style="color:white;clear:left">@Html.ValidationSummary(true)</div>

        <div class="editor-label">
            @Html.LabelFor(model => model.CardNumber)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.CardNumber)
            @Html.ValidationMessageFor(model => model.CardNumber)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.CardHolder)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.CardHolder)
            @Html.ValidationMessageFor(model => model.CardHolder)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Address)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Address)
            @Html.ValidationMessageFor(model => model.Address)
        </div>

        <p>
            <input type="submit" value="Submit" />
        </p>
    </fieldset>
}

事前に助けてくれてありがとう!

4

2 に答える 2

0

次の場合、クライアント検証は正常に機能するはずです。

  1. jquery.validate.jsvalidate.unobtrusive.js付属
  2. ClientValidationEnabledUnobtrusiveJavaScriptEnabled真に設定
  3. document.readyトリガーされる前にフォームをロードする必要があります

RenderPartialフォームが通常の方法でロードされた場合、問題は発生しません。つまり、ajax を使用してフォームをロードしますdocument.readyか (トリガー後にフォームがロードされます)。はいの場合は、次を追加してフォームを手動で解析する必要があります。

$.validator.unobtrusive.parse('<your_form_selector>');

注: jquery バリデーターによって正しく解析されたフォームには、novalidate="novalidate"属性があります。トラブルシューティングを開始するフォームがあるかどうかを確認してください。

于 2013-11-12T10:08:56.043 に答える
0

ビューに JQuery 検証ファイルが含まれていないようです。したがって、クライアント側の検証は機能しませんでした。ビューに次のコードを記述する必要があります。

@section scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
于 2013-11-11T20:03:16.460 に答える