asp.net mvc Beta1中的ModelBinding

Bor*_*ens 7 asp.net-mvc model-binding

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

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

  • 我从哪里开始?这种行为是开箱即用还是我实现了SearchBagBinder?我快速浏览了一下IModelBinder,但是我无法完全理解它,并且DefaultModelBinder源代码并没有让我更聪明.
  • 这个ModelBindingContext是什么?
  • 如何访问我的表单字段?
  • 如果值不是由表单传递,而是直接输入URL,该怎么办?
  • 我在哪里可以找到关于此的最新信息(大多数博客已过时)?我以为我曾经读过菲尔的一篇文章,但我似乎无法再找到它了.

任何帮助表示赞赏.

Nic*_*rdi 3

  • 我从哪说起呢?这种行为是开箱即用的还是我需要实现 SearchBagBinder?我快速浏览了一下 IModelBinder,但无法完全理解它,而且 DefaultModelBinder 源代码也没有让我变得更明智。

它开箱即用。您可以使用 UpdateModel 或 ModelBinder 来实现您想要做的事情。

  • 这个 ModelBindingContext 是什么?

这包含将请求绑定到您的模型的所有必要信息。与 ControllerContext 和 ActionFilterContext 类似,它基本上是 ModelBinder 的状态,并且包含执行您想要执行的操作所需的所有信息(如果您遵循 ASP.NET MVC 团队关于 ModelBinder 应该执行的操作的建议)。

  • 如何访问我的表单字段?
context.HttpContext.Request.Forms["myformfield"];
Run Code Online (Sandbox Code Playgroud)

或者

foreach (var field in context.HttpContext.Request.Forms.Keys) {
    var value = context.HttpContext.Request.Forms[field];
}
Run Code Online (Sandbox Code Playgroud)
  • 如果值不是通过表单传递而是通过直接输入 URL 传递怎么办?

如果您需要检查表单和查询字符串,只需循环遍历这两个集合即可。

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];
}
Run Code Online (Sandbox Code Playgroud)

或者您可以循环遍历包含表单、查询字符串、标头等的参数。

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

您说得对,作为 ASP.NET MVC 的 PM,Phil 是获取信息的最佳场所。