0

ajaxRequest を発行した後にターゲット フォームが表示されるときに、「必須フィールド」検証メッセージがターゲット フォームに表示されるという問題があります。

フォーム内から ajaxRequest コマンドを実行して、部分ビューを別のフォーム内でレンダリングできるようにしています (2 つのフォームは同じページにあり、実際には Telerik スプリッターのペインです)。

// note "MyAjaxCall is passed (below) so that I can populate
// the partial view with the model data
splitter.ajaxRequest(".t-pane:last", "/HierarchyMember/Edit/" + hierarchyId, {requestType: "MyAjaxCall" });

私のコントローラーは単に適切なモデル データを取得し、部分的なビューを返します

return PartialView(hierarchyMemberRepository.Find(hierarchyMember.Id);

次に、部分ビュー (「編集」という名前) 内で、Ajax.BeginForm を介してレンダリングします (フォームが動的に読み込まれるため、Ready では目立たない検証をリロードしていることにも注意してください)。

@using (Ajax.BeginForm("Edit"
    , "HierarchyMember"
    , new AjaxOptions { OnBegin = "ajaxOnBegin", OnFailure = "ajaxOnFailure()"
        , HttpMethod = "Post", InsertionMode = InsertionMode.Replace
        , OnSuccess = "ajaxOnSuccess(data, $('#submitButtonClicked')[0].value)"
        , OnComplete = "ajaxOnComplete" }
        , new { id = "editForm", name = "editForm" }))
{
  @Html.ValidationSummary(false)
  ...
}
<script...>
    $(document).ready(function () {
        var form = $("#editForm");
        // for validation
        form.removeData("validator").removeData("unobtrusiveValidation");
        $.validator.unobtrusive.parse(form);
    });
</script>

したがって、レイアウトにjquery.validate.min.js、jquery.unobtrusive-ajax.min.js、jquery.validate.unobtrusive.min.jsを含めています-ScriptRegistrar内で、jQueryとjQueryValidationの設定をtrueにしてみました間違い

<script src="@Url.Content("~/Scripts/2012.1.419/jquery-1.7.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcValidation.js")" type="text/javascript"></script>
...
@(Html.Telerik().ScriptRegistrar().jQuery(false).jQueryValidation(false).DefaultGroup(group => group.Combined(true).Compress(true)))

必須フィールドを強制するために、次のように EntityFramework の生成されたモデル クラスを拡張する部分クラスがあります。

[Required()]
public object HierarchyId;
[Required()]
public object HierarchyDescription;

SQL Server の上記のフィールドは両方とも NOT NULL として定義されていることに注意してください (Entity Framework (4.1) 内では、プロパティ属性内の IsNullable フラグは false です。

私が抱えている問題は、部分ビューが最初に表示されたときに、フォームのすべての必須フィールドに「...必須フィールド」エラーメッセージが表示されることです (フィールドに値が含まれているかどうかに関係なく)。上記の「必須」属性を持つ部分クラスを除外すると、エラー メッセージは消えますが、クライアント側の検証は行われません (したがって、null 非許容フィールドに空白を入力できます)。

誰かがこれに対する解決策を持っていますか?

4

1 に答える 1

0

上記が発生した理由を疑問に思っている人にとっては、AJAX呼び出しが、いくつかの[必須]フィールド装飾を含む完全な構造を受け入れた私のコントローラーのHTTPポストルートを経由したためです。

解決策は、渡された変数のみを受け入れ、したがって検証に失敗せず、すべてが順調だったコントローラーで別のメソッドを呼び出すことでした。

于 2012-05-30T08:37:37.447 に答える