Я хочу использовать фильтр настраиваемых действий для манипулирования параметрами одного действия.
Пользовательский ввод: 2 имени в форме;
Действие: на самом деле нужно взять 2 идентификатора;
Фильтр действий (при выполнении, проверит имена входных данных и, если они действительны, преобразует их в 2 идентификатора и заменит их в маршрутизированных данных)
потому что я не хочу помещать логику проверки в Action Controller.
вот часть кода:
Информация о маршрутизации
routes.MapRoute (
"По умолчанию", // Название маршрута
"{controller} / {action}", // URL с параметрами
new {controller = "Home", action = "Index"} // Параметры по умолчанию
);
routes.MapRoute (
"RelationshipResults", // Имя маршрута
"Relationship / {initPersonID} / {targetPersonID}", // URL с параметрами
new {controller = "Relationship", action = "Results"});
Форма для отправки (Создать 2 поля ввода и отправить с помощью jquery)
<% using (Html.BeginForm ("Results", "Relationship", FormMethod.Post, new {id = "formSearch"}))
{%>
...
<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]
общедоступные результаты ActionResult (Int64 initPersonID, Int64 targetPersonID)
{...
Моя проблема: в actionFilter он никогда не получает 2 параметра "initPersonID" и "targetPersonID", а значения RouteData.Values не содержат эти 2 ключа ...
(