7

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

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

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

任何帮助表示赞赏。

4

1 回答 1

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];
}
  • 如果值不是通过表单传递而是直接输入 URL 会怎样?

如果您需要同时检查 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];
}

或者您可以循环访问包含 Form、QueryString、Headers 等的 Param。

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

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

于 2008-11-07T12:46:39.677 回答