2012-04-13 3 views
0

私はasp.net C#MVC3をカミソリテンプレートで使用しており、次のことを知りたいと思っています。for-loopに従ってフォームを複数回送信するにはどうすればよいですか?

私はフォームを持っています。このフォームにはボタンがあります。私は以下のコードが実行されるボタンをクリックした場合:

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(); 
    } 
} 

私のロジックによれば、これは提出し、私は私のGridViewから選択した各行を削除する必要があります。 各レコードを選択しますが、これは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"); 
    } 
+2

あなたのC#コード。複数の 'POST'要求をしないでください。 – Yuck

+0

一般に、これは悪いアプローチのようです。トラフィックとレイテンシを節約するために、すべての削除要求を1つ要求してください。あなたのウェブサーバーの設定に問題が生じる可能性があります。つまり、何らかの種類の洪水防止セキュリティフィルタがインストールされている場合(または生産現場でも) – worenga

答えて

2

フォーム上でダイレクトPOSTを実行しているため、フォームが次のループを通過するまでに既にポスティングされているため、ループを初めて実行するだけです。

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

より良い方法は、フォームのPOSTに削除するIDの完全なリストを渡してから、サーバー側ですべてを一度に削除することです。コンマで区切られた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]); 
    } 
} 
あなただけ一度にすべての値を提出し、それらを反復処理する必要があります
+0

私はあなたを得ているか分からない、私はasp.net C#にかなり新しいです。私は自分のコントローラーにHttpPostをpublic ActionResult Delete(int id)と一緒に持っています。コントローラーにIDを渡しています。複数のIDを一度に追加するにはどうすればいいですか? – MrSlippyFist

+0

編集ので、代わりに文字列を受け入れるためにあなたのDeleteメソッド: 'VARの_ids:に渡され、各削除操作のために戻って整数に変換された各IDによる 'その後、(文字列ID) ' を削除するループ= id.Split( '、'); foreach(_idのvar_id){ YourDeleteMethod(Int32.Parse(_id)); } ' –

+0

ありがとう、私は今それを得る。スーパーシンプルなので、私はそれを見ます。 – MrSlippyFist

0

あなたが唯一の1を提出することができますページごとにフォームを作成し、複数を削除する方法を実装しよう1つのリクエストでレコード!

+0

これを行う方法についてご意見はありますか?私はかなり新しいasp.net C#です。 – MrSlippyFist