18

私は次のインデックスビューを持っています:

@model BoringStore.ViewModels.ProductIndexViewModel
@{
    ViewBag.Title = "Index";
}

<h2>Produkte</h2>

<div id='addProduct'>
    @{ Html.RenderPartial("Create", new BoringStore.Models.Product()); }
</div>

<div id='productList'>
    @{ Html.RenderPartial("ProductListControl", Model.Products); }
</div>

「productList」は、すべての製品の単なるリストです。

addProductは、作成ビューをレンダリングします。

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<div id="dialog-confirm" title="Produkt hinzufügen" style="display:none">
@using (Ajax.BeginForm("Index_AddItem", new AjaxOptions { UpdateTargetId = "productList" }))
{ 
    @Html.Raw(DateTime.Now.ToString());

    <div>
        @Html.LabelFor(model => model.Name)
        @Html.EditorFor(model => model.Name)
    </div>
    <br />
    <div>
        @Html.LabelFor(model => model.Price)
        @Html.EditorFor(model => model.Price)
    </div>
    <br /><br />
    <div>
        <input type="submit" value="Produkt hinzufügen" />
    </div>
}

フォームを送信すると、コントローラーのIndex_PASSWORD-methodが呼び出されます。残念ながら、フォームは常にメソッドを2回呼び出します。:(

誰かが私を助けることができますか?

4

2 に答える 2

49

部分ビュー内にスクリプトを含めないでください。彼らはあなたの「メイン」ビューまたはあなたのに行くべき_layout.cshtmlです。

あなたの問題はあなたがjquery.unobtrusive-ajax.min.jsあなたのページに2回を含めたことです。一度はあなたのCreate部分に、そして一度はどこか別の場所に。そのスクリプトを複数回含めると、送信イベントを複数回サブスクライブするため、1回のクリックで複数の送信を取得できます。

したがって、そのスクリプトを1ページに1回だけ含めるようにしてください。したがって、jquery.unobtrusive-ajax.min.js参照をインデックスビューに移動します。

于 2013-02-23T14:34:29.910 に答える
0

jquery.unobtrusive-ajax.min.js上記のようにレイアウトでファイルが重複していないことを確認してください。これは、ブラウザのインス​​ペクタを使用して確認できます。

私が遭遇したこのエラーを引き起こす可能性のある別の問題は、次のようにajaxリクエストでjqueryを使用してフォームを休ませることです

$("form").trigger("reset"); //just remove this line
于 2020-07-20T11:16:26.760 に答える