1

オブジェクトのリストを持つビューモデルがあります。

リストをWebGridにバインドすることは問題なく、すべてのデータを正しく表示します。

オブジェクトにはブール値があります。WebGridの各レコードに表示されるチェックボックスを選択して、ユーザーに変更してもらいます。ユーザーがさまざまなチェックボックスをオン/オフにしてから更新ボタンをクリックすると、オブジェクトの変更を保存できるようにしたいと思います。

この更新により、MVCとRazorで正しい「痛み」が証明されます。

これらの変更をコントローラーに送り返すにはどうすればよいですか?誰かアドバイスしてもらえますか?サンプルはありますか?

アップデート:

各チェックボックスに名前とIDを付けた後、フォーム全体をコントローラーに戻すことができました。値はitem.Idに設定され、チェックボックスが実際にチェックされている場合にのみフォームの属性に表示されます。

したがって、コントローラーでは、次のようにします。

public ActionResult Assign(FormCollection form)
{
    var ch = form.GetValues("itemChk");
    foreach (var id in ch)
    {
      //...Get object using id
      //...Call your method
    }
    return View();
}

chは、アイテムの文字列配列です。チェックされたチェックボックスのみのID。チェックボックスの値としてitem.Idを返すことにより、アイテム自体にその値を割り当て/設定し、保存/更新できます。

次に、値とともに返されるすべてのチェックボックスを取得してみます。また、WebGridの各行のテキストボックスに移動し、戻り値を処理するために同様のことを試してください。

これが私がこの道を進むようになったリンクです。

4

1 に答える 1

1

Json ajax 呼び出しを使用して、FormCollection をコントローラーに渡すことができます

$('#btnClick').click(function (event) {
    var form = $("#fmSearch").serializeArray();
    $.ajax({
        url: '/Home/Assign',
        dataType: "json",
        type: "post",
        data: form,
        cache: false,
        success: function (data) {
        },
        error: OnError
    });
});

注意: "contentType: "application/json; は追加しないでください。charset=utf-8" json コンテンツがないためです。

fmSearch は Html.BeginForm() の ID であり、次のように記述できます。

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "fmSearch" }))
{
    @Html.ValidationSummary(true)
}

最後に、[HttpPost]アクションの上に追加し、ActionResult を JsonResult に置き換えます。

于 2015-04-06T02:04:33.650 に答える