2

Cartだから私は派手なオブジェクトを取るアクションメソッドを持っています:

[HttpPost]
public JsonResult BuildTransaction(Cart cart) { }

Cartモデル:

public class Cart
{
    public Guid UserId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Address Address { get; set; }
}

次のようなJSONをルートに投げます。

object cart = new {
            UserId = uid,
            FirstName = "John",
            LastName = "Travlota",                
            Address = new {
                Line1 = "Ramsdean Grange",
                Town = "boom town",
                PostCode = "dd7 7sx"
            }                
        };
var request = client.PostAsJsonAsync("BuildTransaction", cart);

その結果、コントローラーで遊ぶ Cart タイプのカートができました。素晴らしい!

私の質問は、.NET がこのマッピングをどのように行うのかということです。私はそのどこかを想像してOnActionExecuteいますが、それは何/どのようにこれを行うのですか.

この機能を模倣したい場合、どうすればよいでしょうか? MVC が AutoMapper なしで完全に実行できるように見える場合、AutoMapper のような外部ツールが本当に必要ですか?

4

4 に答える 4

1

これはModel Binderによって行われます。( System.Web.Mvc.DefaultModelBinder)

次のようにカスタム モデル バインダーを実装できます。

コントローラ:

public ActionResult Create([ModelBinder(typeof(CreateModelBinder))] CreateViewModel   vModel)
{

}

モデル バインダー:

public class CreateModelBinder : DefaultModelBinder
{
     public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
     {
          //assign request parameters here, and return a CreateViewModel
          //for example
          CreateViewModel cVM = new CreateViewModel();
          cVM.Name = controllerContext.HttpContext.Request.Params["Name"];
          return cVM;

     }
}

詳細: http://www.dotnetcurry.com/ShowArticle.aspx?ID=584 https://stackoverflow.com/a/1249602/1324019

于 2013-05-31T14:06:15.037 に答える