2008-12-14 50 views
1

有人可以解释或链接到一篇文章,该文章解释了传入控制器操作的参数是如何填充的?当你有Controller/Action/ID时,我理解基本映射,并且ID作为变量传入,如果它不转换为您请求的类型,那么它将不会被传入该动作。您可以向我解释MVC控制器方法的Action参数吗?

不过,我一直在寻找的MVCContrib子控制器代码并有下面的例子:

public ActionResult Index(FirstLevelSubController firstLevel) 

我想知道这个参数是如何被填充,因为据我所知,没有什么是被传递填充这个?

比方说,我创建了下面的动作是在控制器中的唯一行动:

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Index(Task task, ToDoList list) 

我会怎么传回,为什么? (我知道我可以做一个简单的测试发现,如果他们没有回来,这将使我不为明智的原因。

感谢

回答

2

一般来说,其ControllerActionInvoker的函数。对象被传递到之后,他们在定制ControllerActionInvoker执行实例化的行动。约ControllerActionInvoker作品如何看一看ASP.NET MVC - ControllerActionInvoker: Part 1

欲了解更多信息也有一个所谓的“模型绑定”功能,可以帮助您的请求参数绑定到你的对象,所以在大多数情况下,你不需要制作你自己的ControllerActionInvoker实现。看看这个: ASP.NET MVC model binding from ScottGu

4

首先,您将通过查询参数获取传递给具有[AcceptVerbs(HttpVerbs.Get)]属性的方法的参数的唯一方法。例如:

http://localhost/Task/Index/?task=mytask&todolist=a,b,c,d 

你们中许多复杂的参数请参阅该操作方法是通过邮寄调用,将最LIKEY成为候选人的[AcceptVerbs(HttpVerbs.Post)。

创建下面的示例方法:

public ActionResult Index(int id, FormCollection form) 
{ 

} 

如果你在哪里检查表格收集你可能有一些像后窗体发布以下内容:在这种情况下asp.net

form["name"] = "bob" 
form["city"] = "LA" 
form["state"] = "CA" 
form["zip"] = "90210" 

mvc简单地解析了表单值并将它们抛入表单集合对象中。当然,现在您必须手动提取每个参数才能访问这些值。如果有asp.net mvc可以为你处理这个过程的方法,这不是很好吗?如果你有以下类:

public class User 
{ 
    string string Name {get; set;} 
    string string City {get; set;} 
    string string State {get; set;} 
    string string Zip {get; set;} 
} 

,并补充说,以你的操作方法

public ActionResult Index(int id, User user) 

asp.net的MVC将使用反射来的用户参数调用这样就把你的动作方法之前。实际上,它正在执行以下操作,对于表单集合中的每个键,它都使用反射来定位该属性,并在action方法中声明参数列表。如果它发现与它匹配的属性将尝试设置它的值。

user.Name = form["name"] 
user.City = form["city"] 
user.State = form["state"] 
user.Zip = int.Parse(form["zip"]) 

然而,id的值会从相对于形式收集的路由值来设定。

相关问题