2010-05-18 5 views
1

Я хочу использовать настраиваемый фильтр действий для управления параметрами для одного действия.Asp.NET MVC ActionFilter не может получить форму Отправить данные

Входы пользователя: 2 имени в форме;

Действие: на самом деле необходимо взять 2 идентификатора;

Действие фильтра (onExecuting, будет проверять имена входных и если действительно, превратить их в 2 идентификаторов и заменить в routedata)

, потому что я не хочу, чтобы положить логику проверки в контроллере действий.

вот часть кода:

  1. Routing Info

    routes.MapRoute ( "По умолчанию", // Название маршрута "{контроллер}/{действие}", // URL с параметрами new {controller = "Home", action = "Index"} // Параметры по умолчанию );

    routes.MapRoute ( "RelationshipResults", // Имя маршрута "Связь/{initPersonID}/{targetPersonID}", // URL с параметрами новый контроллер {= "Отношения", действие = "Результаты"});

  2. Форма представить (Создать 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> 
    
  3. Действие фильтра

    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 
    
  4. Действие/Контроллер

    [ValidationActionFilter] [HandleError] общественного ActionResult Результаты (Int64 initPersonID, Int64 targetPersonID) {...

Моя проблема не является: в actionFilter, он никогда получает 2 параметра "initPersonID" и "targetPersonID", то RouteData.Values ​​не содержат эти 2 ключа ...

:(

ответ

0

Проблема заключается в том, что, поскольку ваши маршруты не имеют значений для initPersonName и targetPersonName, они никогда не попадают в ваши данные маршрута. Попробуйте (даже если это выглядит немного странно):

initPersonName = filterContext.RouteData.Values["initPersonID"] as String; 
targetPersonName = filterContext.RouteData.Values["targetPersonID"] as String; 

Так как «... ID» WHAS какие значения где называемые в маршрутах, это то, что вы должны искать в ваших данных маршрутов. Тот факт, что вы на самом деле не включаете идентификаторы в URL-адрес, - это другое дело ...

+0

благодаря Томс, он не работает я изменил их (обновленный встроенный) – Goden

+0

дайте мне правильный 1 вещь, если я типа HTTP: // локальный/отношения/name1/name2 это вызовет действие фильтровать и получать мои значения, но если я отправлю через форму, я не получу их. – Goden

+0

Теперь все становится интересным, я могу получить данные формы по фильтруContext.HttpContext.Request.Form ["initPersonID"], если данные отправлены из формы. но я могу использовать initPersonName = filterContext.RouteData.Values ​​["initPersonID"] как String; для получения строки, если вы просто вводите имя в URL-адрес. так почему эти 2 не объединены? – Goden

Смежные вопросы