Asp.NET MVC ActionFilter не может получить данные для отправки формы - PullRequest
1 голос
/ 18 мая 2010

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

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

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

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

потому что я не хочу помещать логику проверки в Action Controller.

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

  1. Информация о маршрутизации

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

    routes.MapRoute ( "RelationshipResults", // Имя маршрута "Relationship / {initPersonID} / {targetPersonID}", // URL с параметрами new {controller = "Relationship", action = "Results"});

  2. Форма для отправки (Создать 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>
    
  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 ключа ...

(

1 Ответ

0 голосов
/ 18 мая 2010

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

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

Поскольку "... ID" имеет значения, которые вызываются в ваших маршрутах, это то, что вы должны искать в данных вашего маршрута. Тот факт, что вы на самом деле не включаете идентификаторы в URL, это другой вопрос ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...