Я хочу использовать настраиваемый фильтр действий для управления параметрами для одного действия.Asp.NET MVC ActionFilter не может получить форму Отправить данные
Входы пользователя: 2 имени в форме;
Действие: на самом деле необходимо взять 2 идентификатора;
Действие фильтра (onExecuting, будет проверять имена входных и если действительно, превратить их в 2 идентификаторов и заменить в routedata)
, потому что я не хочу, чтобы положить логику проверки в контроллере действий.
вот часть кода:
Routing Info
routes.MapRoute ( "По умолчанию", // Название маршрута "{контроллер}/{действие}", // URL с параметрами new {controller = "Home", action = "Index"} // Параметры по умолчанию );
routes.MapRoute ( "RelationshipResults", // Имя маршрута "Связь/{initPersonID}/{targetPersonID}", // URL с параметрами новый контроллер {= "Отношения", действие = "Результаты"});
Форма представить (Создать 2 поле ввода и нажмите кнопку с помощью JQuery)
<% при использовании (Html.BeginForm ("Итоги", "Связь", FormMethod.Post, новый {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 ключа ...
:(
благодаря Томс, он не работает я изменил их (обновленный встроенный) – Goden
дайте мне правильный 1 вещь, если я типа HTTP: // локальный/отношения/name1/name2 это вызовет действие фильтровать и получать мои значения, но если я отправлю через форму, я не получу их. – Goden
Теперь все становится интересным, я могу получить данные формы по фильтруContext.HttpContext.Request.Form ["initPersonID"], если данные отправлены из формы. но я могу использовать initPersonName = filterContext.RouteData.Values ["initPersonID"] как String; для получения строки, если вы просто вводите имя в URL-адрес. так почему эти 2 не объединены? – Goden