ASP.NET MVC模型绑定和动作参数

时间:2009-05-01 13:16:33

标签: asp.net asp.net-mvc

假设我将控制器操作定义为:

public ActionResult(MyModel model, string someParameter) 
{
    // do stuff
}

我有一个MyModel类型的自定义模型绑定器,并且视图中有一个名为“SomeParameter”的表单字段未绑定到模型。 ASP.NET MVC如何知道将Request.Form["SomeParameter"]的值作为“someParameter”参数的值传递给操作?

5 个答案:

答案 0 :(得分:3)

ASP.NET使用反射来确定要调用的正确方法并构建要传递的参数。它基于FormCollection数组执行此操作。基本上它会看到模型。*键入那里和FormCollection["someParameter"]它首先尝试Action(model,someParameter)然后Action(model)然后Action()。由于它找到一个带有model和someParameter参数的Action,因此它会尝试将它们转换为参数类型。

然而,默认情况下它会盲目地引入一些安全风险,this blog post会对此进行更详细的介绍。

如果有人可以发布链接,更详细地描述了如何在引擎盖下完成ModelBinding。

答案 1 :(得分:1)

因为默认模型绑定器将用于someParameter,除非您另行指定。默认的模型绑定器完全按照您的描述进行操作。

答案 2 :(得分:1)

菲尔·哈克(Phil Haack)在How a Method becomes an Action发表了一篇文章,解释了这个解决方案是如何发生的。

答案 3 :(得分:0)

听起来你需要一个模型绑定器。这些允许您定义表单数据如何绑定到模型参数。您可以通过以下方式阅读更多相关信息:

ASP.NET MVC Preview 5 and Form Posting Scenarios

How to use the ASP.NET MVC Modelbinder

答案 4 :(得分:0)

最简单的方法之一是在页面上使用Html项目,其名称与action方法中的输入参数相同。 EX)在View中我们有:

    <input name="refNo" type="text">

然后在Action方法中:

    public ActionResult getOrders(string refNo)

因此,它只是将“refNo”的值绑定到“getOrders”操作的输入参数。