0

ajax.ActionLink の後の目立たない検証に問題があり、フォームが正しく送信され、ajax が div ターゲットを置き換えると、クライアント側の検証が作成されません。

私はこれをビューに持っています:

@using (Ajax.BeginForm("Action", "Controller", new { area = "Area" }, new AjaxOptions { HttpMethod = "post", InsertionMode = InsertionMode.Replace, UpdateTargetId = "divTarget" }))
    {
        //html stuff....
            <li>
                <label><br/></label>
                <div class="perfil_datos_botones">
                    <input type="submit" value="Crear cita" id="enviar">
                    @Ajax.ActionLink("Volver", "Action", "Controller", new { area = "Area" }, new AjaxOptions { HttpMethod = "get", InsertionMode = InsertionMode.Replace, UpdateTargetId = "divTarget", OnComplete = "ValidarForm('target')" }, new { @class = "links_botones" })
                </div>
            </li>
        </ul>
    }

OnComplete 関数:

function ValidarForm(sel) {
        var selector = "#" + new String(sel);
        $.validator.unobtrusive.parse(selector);
    }

私はこれをビューに置きます:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

そしてこれはレイアウトで:

@Scripts.Render("~/bundles/jqueryval_noajax")

このバンドルは、ajax.unobtrusive.js なしで jquery-validation プラグインをレンダリングします。ビューに複数の投稿が生成されるためです。

私は OnSuccess で関数を使用しようとしましたが、バリデーターは「目立たないフィールドは未定義です」という例外をスローします。

ajax.BeginForm または ajax.ActionLink を使用するすべての partialView で、クライアント側の検証をリロードする必要があります。

編集1:

私はそれ$.validatorが見つかりundefined、ajax get by jqueryでajax.actionLinkを変更しましたが、それでもエラーが発生します

4

1 に答える 1

0

組み込みの Ajax.BeginForm の使用に問題があり、代わりに JQuery を直接使用しました。その理由の 1 つは、利用可能な JQuery に関する大量のドキュメントがあり、そのための MS ラッパーはそれほど多くないためです。

したがって、フォームは単純なボタンを備えた非常に古典的な HTML フォームです (すべての入力フィールドを削除しました)。

<form id="AllCatsForm>
  <table>
    <input type="submit" value="Search" />
  </table>
</form>

次に (最初は script タグの間で、次に別の .js ファイルで)

$("#AllCatsForm").ajaxForm({
    url: "/home/GetAllItems",
    type: "POST",
    beforeSubmit: validateCatSelected,
    success: function (data) {
        $("#ListOfBooksHere").html(data);
    }
});

必須入力フィールドをチェックする関数が空ではありませんでした:

function validateCatSelected(formData, jqForm, options) {
    var selectedBooksCategory = $("input[name=CategoryNodeId]").fieldValue();
    if (selectedBooksCategory[0] === "0") {
        alert("Please select a Genre or Category before doing a Custom Search.");
        return false;
    }
    itemLoad = 1;
}

「ListofBookshere」は、検索結果のコンテナーとして使用される単なる空の DIV タグです。

<div id="ListOfBooksHere" style="padding: 5px; min-height: 500px;" />

これは(ほとんどすべてのフィールドが削除された)コントローラーの関数です)部分ビューを返しますが、このビューはメインビューではないことに注意してください。その唯一の用途は、適切な html に返されたデータを適切にフォーマットすることです。

[HttpPost]
        public async Task<ActionResult> GetAllItems(GenericSearchViewModel filter)
        {
            vm = filter;            
            search.Condition = (string.IsNullOrEmpty(vm.Condition) != true) ? vm.Condition : "All";         
            vm.CatsResults.CatsListResults = await GetCatsResults(search);                   
            return PartialView("GetAllItems", vm);        
        }

お役に立てれば。MVC から直接 JQuery を使用することはそれほど難しくなく、より細かく制御できます。確かに、ビルトイン ヘルパーが機能していない、または役に立たないと言っているわけではありません。イライラし始めていたので、JQuery ダイレクト ルートを試してみましたが、うまく機能しています。

この助けを願って、バーナード

PS-忘れるつもりだった!このコードは、JQuery プラグイン JQuery Form を使用しています: http://malsup.com/jquery/form/

于 2013-09-11T15:01:36.300 に答える