asp.net mvc Beta1中的ModelBinding

时间:2008-11-07 10:56:23

标签: asp.net-mvc model-binding

我将我的Web应用程序从预览3转换为beta1,现在我正在尝试使用框架的新功能。其中之一是ModelBinding。

对于这种特殊情况,我创建了一个类(现在)只是一堆简单类型属性的容器。 如果我创建一个包含大量文本框的表单,我希望框架用这些字段填充SearchBag实例。

  • 我从哪里开始?这是这种行为吗? 开箱即用或我实施了 SearchBagBinder?我快看了一下 在IModelBinder,但不能完全 把头包住它和它 DefaultModelBinder源没有 让我更聪明。
  • 这个ModelBindingContext是什么?
  • 如何访问我的表单字段?
  • 如果未传递值,该怎么办? 通过表格,而不是通过输入 网址直接?
  • 我在哪里可以找到最新的 有关这方面的信息(大多数博客都是 过时的)?我以为我读了一篇文章 菲尔一次,但我不能 似乎不再发现它了。

感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

  
      
  • 我从哪里开始?这是这种行为吗?   开箱即用或我实施了   SearchBagBinder?我快看了一下   在IModelBinder,但不能完全   把头包住它和它   DefaultModelBinder源没有   让我更聪明。
  •   

开箱即用。您可以使用UpdateModel或ModelBinder来实现您的目标。

  
      
  • 这是什么ModelBindingContext?
  •   

这包含要绑定到模型的请求的所有必要信息。与ControllerContext和ActionFilterContext类似,它基本上是ModelBinder的状态,并且包含了执行所需操作所需的所有信息,如果您按照ASP.NET MVC团队的建议来了解ModelBinder应该做什么。

  
      
  • 如何访问我的表单字段?
  •   
context.HttpContext.Request.Forms["myformfield"];

foreach (var field in context.HttpContext.Request.Forms.Keys) {
    var value = context.HttpContext.Request.Forms[field];
}
  
      
  • 如果未传递值,该怎么办?   通过表格,而不是通过输入   网址直接?
  •   

如果你需要检查Form和QueryString,只需遍历两个集合。

foreach (var field in context.HttpContext.Request.Forms.Keys) {
    var value = context.HttpContext.Request.Forms[field];
}
foreach (var field in context.HttpContext.Request.QueryStrings.Keys) {
    var value = context.HttpContext.Request.QueryStrings[field];
}

或者你可以遍历Param,它将包含,Form,QueryString,Headers等。

foreach (var field in context.HttpContext.Request.Params.Keys) {
    var value = context.HttpContext.Request.Params[field];
}
  
      
  • 我在哪里可以找到最新的   有关此*的信息(大多数博客都是   过时的)?我以为我读了一篇文章   菲尔有一次,但我不能   似乎不再发现它了。
  •   

你说得对,Phil是ASP.NET MVC PM的最佳信息来源。