2008-11-07 39 views
7

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

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

  • 我从哪里开始?这种行为 开箱即用,还是我实施了 SearchBagBinder?我在IModelBinder上快速浏览了 ,但不能完全打包我的头, DefaultModelBinder源不是 让我变得更聪明。
  • 这是什么ModelBindingContext?
  • 如何访问我的表单域?
  • 如果数值不是通过 通过表单传递,而是直接通过输入 URL会怎样?
  • 我在哪里可以找到最新的 信息(大多数博客是 过时的)?我以为我曾经一次读过菲尔的帖子 ,但我不能 似乎找不到它了。

任何帮助表示赞赏。

+0

3票,两颗星,没有答案:( – 2008-11-07 12:09:36

+0

3票,因为3人认为这是一个很好的问题,2星,因为2人作为最喜欢的问题,并追踪回复 – TheCodeJunkie 2008-11-07 21:02:09

回答

3
  • 从哪里开始?这种行为 开箱即用,还是我实施了 SearchBagBinder?我在IModelBinder上快速浏览了 ,但不能完全打包我的头, DefaultModelBinder源不是 让我变得更聪明。

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

  • 这是什么ModelBindingContext?

这包含请求绑定到您的模型的所有必要信息。类似ControllerContext和ActionFilterContext,它基本上是ModelBinder的状态,并包含所有必要的信息,做你想做的,如果你遵循什么ModelBinder的是应该做的ASP.NET MVC团队的建议。

  • 如何访问我的表单域?
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]; 
} 

,或者您可以通过帕拉姆将包含表格,查询字符串,页眉等循环

foreach (var field in context.HttpContext.Request.Params.Keys) { 
    var value = context.HttpContext.Request.Params[field]; 
} 
  • 我在哪里可以找到关于这件事最新 信息* (大部分博客都是 过时)?我以为我一次读Phill的帖子 ,但我不能 似乎找不到它。

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