c# - 在 .NET MVC Controller 上,映射是什么?

标签 c# asp.net-mvc

所以我有一个需要一个花哨的 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/

相关文章:

c# - 根节点有属性时如何选择xml根节点?

c# - AutoMapper 3 中的映射行为不一致

c# mvc 如何将根 url 映射到特定 View

asp.net-mvc - MVC 禁用 SelectListItem 属性不起作用

c# - 使用 Objective Sharpie 将 Spotify iOS SDK 绑定(bind)到 C#

c# - WPF - Windows Azure 样式 TabControl(?)

javascript - 如何将自己的 JS 添加到 Razor View ?

css - MVC TextBoxFor 占位符文本对齐

c# - 如何停止此算法循环?

C# FileSystemWatcher 严重问题?