日期:2014-05-16  浏览次数:21085 次

Asp MVC(控制层高级调用)

换起ACTION

起到该作用的类是ControllerActionInvoker

作用:

1.找到对应的ACTION

2.找到当前路由传过来的参数,并解析

3.找到所有ACTION的FILTERS

4.然后调用executeResult返回。返回一个actionresult

默认返回(Content[即文本方式])

?

从router到controller链接的桥梁就是该类。

由router只是定义一个URL字典。然后该类就去遍历该字典,找到名字对应的ACTION的名字。

action的选择方法:

该类使用反射的方式来得到CONTROLLER所使用的方法。(所以方法函数必须是PUBLIC)

所以在CONTROLLER的方法要标记为ACTION,必须符合三个标准。

1.不允许有NonActionAttribute

2.构架函数,属性控制器,时间访问器不能作为制定的ACTION方法。

3.继承自OBJECT的方法或继承自CONTROLLER的方法

?

给你的ACTION取别名:

可以在你的ACTION方法上定义ActionName("别名")

?[ActionName("View")]
??????? public ActionResult DoSomething()
??????? {
??????????? string js = "$('#some-div').html('Updated');";
??????????? return JavaScript(js);
??????? }

?

然后你访问你的ACTION使用的就是:

http://localhost:2331/home/view?

?

在遍历ROUTER的结束,匹配的结果处理是通过ActionSelectorAttribute.来进行验证。如果验证通过,就返回

所以这就是为什么作为ACTION的方法不能是OBJECT的公用类,就是因为有该类进行验证。

?

映射参数:

/simple/distance/0,0/1,2

Request Form Collection

Route Data

Request QueryString collection

?

Request Form Collection:

如果使用POST方式提交,页面中的所有元素都会放到该集合中

?

调用ACTION

分为同步调用和异步调用

异步方式请求使用标签,如果要设置权限限制的话:

[Authorize]//权限验证

[HandleError(ExceptionType=typeof(TimeoutException))]

[NoAsyncTimeout]//永远不超时

[AsyncTimeout(6000)]//设置超时时间。

//对于以ASYNC和COMPLETE结尾的方法不能直接调用

public void ActionAsync(){

?

}

public ActionResult ActionCompleted()

{

?

}

?

?

?