0

かみそりのテンプレートでasp.netC#MVC3を使用していて、次のことを知りたいです。

フォームがあります。このフォームにはボタンが含まれています。ボタンをクリックすると、次のコードが実行されます。

function OnGetSelectedFieldValues(result) {
    for (var i = 0; i < result.length; i++) {
        $("#id").val(result[i]); //This will replace the value of my hidden field with the selected id
        $("#DeleteForm").submit();
    }
}

私のロジックによれば、これはグリッドビューから選択した各行を送信および削除する必要があります。各レコードを選択します。これは、Javascript「alert()」でテストしました。しかし、それは最初のレコードを削除するだけです、なぜこれが起こるのですか、そしてどうすればこれを修正できますか?

よろしく、

マルコ

編集:これは私のフォームです(理解を容易にするため):

    @using (Html.BeginForm("Delete", "Home", FormMethod.Post, new { id = "DeleteForm" }))
    {
        <input type="hidden" id="id" name="id" />
        <input type="button" id="button" value="Verwijder geselecteerde" />
    }

私のコントローラー:

[HttpPost]
    public ActionResult Delete(int id)
    {
        ErrorRepository repo = new ErrorRepository();
        var test = repo.GetById(id);
        repo.Delete(test);
        return RedirectToAction("Index");
    }
4

2 に答える 2

2

フォームで直接POSTを実行しているため、フォームは次のループに到達するまでにすでに投稿されているため、ループを最初に実行するだけです。

これは複数の削除を処理する適切な方法ではありませんが、この方法で行う必要がある場合は、複数の削除が非同期で発生するようにAJAXpostメソッドを作成する必要があります。

より良い方法は、削除するIDの完全なリストをPOSTフォームに渡してから、サーバー側で一度にすべて削除することです。カンマ区切りのIDの文字列を作成し、それをPOSTメソッドに送信する必要があります。次に、メソッドで使用します

    var _ids = values.split(',');
    foreach(var _id in _ids){
        YourDeleteMethod(Int32.Parse(_id));
    }

複数の投稿を介してそれを行う必要がある場合は、次のようなものが必要になります。

function OnGetSelectedFieldValues(result) {
    for (var i = 0; i < result.length; i++) {
        $.post("yourPostURL",  result[i]);
    }
}
于 2012-04-13T13:43:22.237 に答える
0

1ページに一度に送信できるフォームは1つだけです。一度のリクエストで、複数のレコードを削除する方法を実装してみてください。

于 2012-04-13T13:37:02.373 に答える