所以我有一个需要一个花哨的 Cart
对象的操作方法:
[HttpPost]
public JsonResult BuildTransaction(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 类型的购物车可以在我的 Controller 中使用。太棒了!
我的问题是,.NET 如何进行这种映射?我想象它在 OnActionExecute
的某个地方,但它是做什么/如何做到这一点的。
如果我想模仿这个功能,我会做什么?如果 MVC 似乎完全能够在没有 AutoMapper 之类的外部工具的情况下完成任务,那么我真的需要像 AutoMapper 这样的外部工具吗?
最佳答案
这是由模型绑定(bind)器完成的。 (System.Web.Mvc.DefaultModelBinder
)
您可以像这样实现自定义模型绑定(bind)器:
Controller :
public ActionResult Create([ModelBinder(typeof(CreateModelBinder))] CreateViewModel vModel)
{
}
模型绑定(bind)器:
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
关于c# - 在 .NET MVC Controller 上,映射是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16859148/