【发布时间】:2010-05-18 07:10:38
【问题描述】:
我想使用自定义操作过滤器将参数操作到一个操作。
用户输入:一个表单中的 2 个名称;
Action:实际需要取2个id;
Action Filter(onExecuting,将验证输入名称,如果有效,将它们转换为2个id并替换在路由数据中)
因为我不想将验证逻辑放在 Action Controller 中。
这是部分代码:
-
路由信息
routes.MapRoute( "Default", // Route name "{controller}/{action}", // URL with parameters new { controller = "Home", action = "Index"} // Parameter default ); routes.MapRoute( "RelationshipResults", // Route Name "Relationship/{initPersonID}/{targetPersonID}", // URL with parameters new { controller = "Relationship", action = "Results" } ); -
表单提交(创建2个输入框并通过jquery提交)
...<td align="left"><%: MvcWeibookWeb.Properties.Resource.Home_InitPersonName%></td> <td align="right"> <%= Html.TextBox("initPersonID")%></td> <td rowspan="3" valign="top"> <div id="sinaIntro"> <%: MvcWeibookWeb.Properties.Resource.Home_SinaIntro %> <br /> <%: MvcWeibookWeb.Properties.Resource.Genearl_PromotionSina %> </div> </td> </tr> <tr> <td align="left" width="90px"><%: MvcWeibookWeb.Properties.Resource.Home_TargetPersonName%></td> <td align="right"><%= Html.TextBox("targetPersonID")%></td> </tr> <tr> <td colspan="2" align="right"> <a href="#" class="btn-HomeSearch" onclick="$('#formSearch').submit();"><%: MvcWeibookWeb.Properties.Resource.Home_Search%></a> </td> -
动作过滤器
public override void OnActionExecuting(ActionExecutingContext filterContext) { Sina.Searcher searcher = new Sina.Searcher(Sina.Processor.UserNetwork); String initPersonName, targetPersonName; // form submit names, we need to process them and convert them to IDs before it enters the real controller. initPersonName = filterContext.RouteData.Values["initPersonID"] as String; targetPersonName = filterContext.RouteData.Values["targetPersonID"] as String; // do sth to convert it to ids and replace -
动作/控制器
[ValidationActionFilter] [HandleError] public ActionResult Results( Int64 initPersonID, Int64 targetPersonID) { ...
我的问题是:在 actionFilter 中,它永远不会获取 2 个参数“initPersonID”和“targetPersonID”,RouteData.Values 不包含这两个键。
【问题讨论】:
标签: asp.net-mvc-2 form-submit action-filter