0

ページで動的に変更される PartialView のセットがあります。PartialView は ajax を使用して次をロードします。そのうちの 1 つは 20 の入力のようなフォームを持っています。現在、1 つの入力だけを送信していますが、残りの入力を送信するにはどうすればよいですか? 私はこのパーシャルビューでこれを持っています:

var shipping= $("input[name='shipping']:checked").val()
    $.ajax(
      {
          url: '/Home/Payment',
          type: "POST",
          data: { 'shipping': shipping},
          success: function (data) {
              $("#cart").html(data);

          }
      });

そして、これはコントローラーで:

public ActionResult Payment(string shipping)
    {
        **do stuff*
        return PartialView("NextPartialView");
    }

コントローラーはフォームのすべての入力を受け取りますが、前に述べたように、20 個あります。データを送信する別の手法を使用して、コードをクリーンで読みやすい状態に保つ方法はありますか?

私はMVCとカミソリが初めてです

ありがとう

4

2 に答える 2

1

JSON モデル バインディングを使用します。 この投稿は、画像を取得するのに役立ちます。

つまり、モデルに一致するプロパティ名を持つ JavaScript オブジェクトを作成します。コントローラーに送信すると、バインドされます。また、数値は文字列として送信する方がよいことに注意してください (これを見てください)。

于 2012-11-12T01:47:24.920 に答える
0

アイテムをフォームに入れ、フォームをシリアル化してアクションメソッドに送信します。

@model YourSomeViewModel
@using(Html.Beginform())
{
  FirstName :   @Html.TextBoxFor(x=>x.FirstName)
  LastName:   @Html.TextBoxFor(x=>x.LastName)
  Location :   @Html.TextBoxFor(x=>x.Location)
  Is Available to hire @Html.CheckBoxFor(x=x.IsAvailable)
  <input type="submit" id="btnSubmit" />
}

今あなたのスクリプトで

$(function(){
  $("#btnSubmit").click(function(e){
    $.post("@Url.Action("Save","YourControllerName")", 
                          $(this).closest("form").serialize(), function(data){
            //do something with the response
    });    
  });  
});

これで、アクションメソッドパラメータがビューモデルクラスになります。Mvc Modelバインディングは、投稿された(シリアル化された)フォームデータをビューモデルクラスのインスタンスにマップします。

[HttpPost]
public ActionResult Save(YourSomeViewModel model)
{
   //check model properties now

  //saved and respond /redirect
}
于 2012-11-12T02:03:29.003 に答える