日期:2014-05-16 浏览次数:21085 次
换起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()
{
?
}
?
?
?