2

最初のプロパティは Model オブジェクトで、2 番目のプロパティは List です。私の見解では、2つの部分があります。

最初の部分は、最初のオブジェクト、Firstname、lastname、email などのデータを入力します。

ビューの 2 番目の部分は、ユーザーが複数のアドレスを追加する Web グリッドです。

今私の問題は何ですか、フォームからデータを取得し、それらをviewmodel List プロパティに追加するJSONアクションがコントローラーにありますが、何も起こりません。

データがビューから取得され、ビューモデルに追加されていることを確認しましたが、ビューモデルが空になるたびに。

[Authorize]
public JsonResult addAddress(Address addr, CustomerViewModel model)
{
    if (model.CAddress== null)
        model.CAddress= new List<Address>();

    model.CAddress.Add(addr);

    return Json(model, JsonRequestBehavior.AllowGet);
}

私はJavascriptを使用しています:

function AddAddress() 
{ 
 var addID = $("#lstID option:selected").val(); 
 var addName = $("#lstAddName option:selected").text(); 

 var Address = 
 { 
  addID : addID.toString(), 
  addName : addName.toString() 
 }; 

$.ajax({ 
 type: "POST", 
 url: "@Url.Action("addAddress","Customer")", 
 dataType: "json", contentType: "application/json; charset=utf-8", 
 data: JSON.stringify(Address), 
 success: function (data) {} }); }; 

4

1 に答える 1

0

よし、いくつかのハイブリッドではなく、実際のビューモデルを書くことから始めましょう:

public class CustomerViewModel 
{
    public List<AddressViewModel> Addresses { get; set; }

    ... some other properties you already had
}

public class AddressViewModel
{
    public string Id { get; set; }
    public string Name { get; set; }
}

次に、ビューモデルとドメインモデルのハイブリッドや混合ではなく、実際のビューモデルを取得するようにコントローラーアクションを調整します。

[Authorize]
[HttpPost]
public ActionResult AddAddress(CustomerViewModel model)
{
    return Json(model);
}

最後に、AJAX 呼び出しを調整します。

function AddAddress() { 
    $.ajax({ 
        url: '@Url.Action("AddAddress", "Customer")', 
        type: 'POST', 
        contentType: 'application/json; charset=utf-8', 
        data: JSON.stringify({ 
            addresses: [
                { 
                    id : $('#lstID').val(), 
                    name : $('#lstAddName option:selected').text()
                }
            ],
            someOtherPropertyOnYourViewModel: 'some other value'
        }), 
        success: function (data) {

        } 
    }); 
}
于 2013-02-25T13:57:21.990 に答える