ASP.NET MVC模型绑定

openkk 10年前
     <p> 模型绑定(Model Binding)特性使用请求数据来创建强类型对象,以此简化控制器的动作。<a href="/misc/goto?guid=4958329355512266839">Jess Chadwick</a> 在 MSDN 上的一篇文章中<a href="/misc/goto?guid=4958329356308508117">深入探索了该特性</a>,并研究了复杂的场景,包括缺省模型绑定器不满足要求时如何定制。</p>    <p> ASP.NET MVC 模型绑定是什么?它让下面这段代码:</p>    <blockquote>     public ActionResult Create ()     <p>{</p>     <p>var product = new Product () {</p>     <p>AvailabilityDate = DateTime.Parse (Request["availabilityDate"]),</p>     <p>CategoryId = Int32.Parse (Request["categoryId"]),</p>     <p>Description = Request["description"],</p>     <p>Kind = (ProductKind) Enum.Parse (typeof (ProductKind),</p>     <p>Request["kind"]),</p>     <p>Name = Request["name"],</p>     <p>UnitPrice = Decimal.Parse (Request["unitPrice"]),</p>     <p>UnitsInStock = Int32.Parse (Request["unitsInStock"])</p>     <p>}</p>     <p>};</p>    </blockquote>    <p> 可以这样写:</p>    <blockquote>     public ActionResult Create (Product product)     <p>{</p>     <p>// ...</p>     <p>}</p>    </blockquote>    <p> ASP.NET 会自动将查询字符串参数名称与强类型对象中的属性名称相对应。这也支持 JSON 的 post 值。模型绑定支持更复杂的状况,比如集合与嵌套对象,不过在使用集合时你必须小心语法(其中要使用<a href="/misc/goto?guid=4958329357104939581">索引器来表示</a>集合中的数据项)。</p>    <p> 某些情况下,读者可能希望使用<a href="/misc/goto?guid=4958329357909648835">自定义的模型绑定器</a>,以扩展现有的模型绑定器。常用的例子是将接口与抽象类绑定,这需要与下层业务模型的高度耦合,因为在运行时,绑定器需要基于请求数据选择特定实现。Jess 的<a href="/misc/goto?guid=4958329356308508117">文章</a>展示了如何实现,只需继承 DefaultBindingProvider,并重载需要的行为。想知道如何对自定义的模型绑定期进行单元测试,可参考 <a href="/misc/goto?guid=4958329359446260513">Scott Hanselmann</a> 的文章《<a href="/misc/goto?guid=4958329360247484177">分割 DateTime——对 ASP.NET MVC 的模型绑定器进行单元测试</a>》。</p>    <p> <strong>查看英文原文:<a href="/misc/goto?guid=4958329361052475103">ASP.NET MVC Model Binding</a></strong></p>    <div id="come_from">     来自:     <a id="link_source2" href="/misc/goto?guid=4958329361843226690" target="_blank">InfoQ</a>    </div>