Значение маршрута остается прежним - PullRequest
0 голосов
/ 21 февраля 2012

В моем .cshtml я рисую некоторые данные. Затем у меня есть текстовое поле для ответа и кнопка, с помощью которой люди могут ответить на ветку обслуживания клиентов.

@using (Html.BeginForm("Update", "CustomerServiceMessage", FormMethod.Post, new { id = 0 }))
    ...
}

Когда я отправляю сообщение, я не получаю 0, когда он достигает моего метода действия Обновления, я получаю идентификатор родительского служебного сообщения, которое я нарисовал над окном ответа. Так что это похоже на ветку электронной почты / форума, но, хотя я жестко кодирую = 0, метод Update получает идентификатор родительского сообщения, которое я нарисовал на экране (отображается).

Не могу понять, почему.

1 Ответ

5 голосов
/ 21 февраля 2012

Когда я отправляю, я не получаю 0, когда он достигает моего метода действия Обновления

Это нормально, вы никогда не отправляете этот идентификатор на свой сервер.Вы только что использовали неправильную перегрузку помощника Html.BeginForm:

@using (Html.BeginForm(
    "Update",                        // actionName
    "CustomerServiceMessage",        // controllerName
    FormMethod.Post,                 // method
    new { id = 0 }                   // htmlAttributes
))
{
    ...    
}

и получили следующую разметку (при условии маршрутов по умолчанию):

<form id="0" method="post" action="/CustomerServiceMessage/Update">
    ...
</form>

Видите проблему?

А вот правильная перегрузка :

@using (Html.BeginForm(
    "Update",                        // actionName
    "CustomerServiceMessage",        // controllerName
    new { id = 0 },                  // routeValues
    FormMethod.Post,                 // method
    new { @class = "foo" }           // htmlAttributes
))
{
    ...    
}

, которая генерирует (при условии маршрутов по умолчанию):

<form method="post" action="/CustomerServiceMessage/Update/0">
    ...
</form>

сейчасвы получите id=0 внутри соответствующего действия контроллера.

Кстати, вы можете сделать свой код более читабельным и избежать подобных ошибок, используя C # 4.0 именованные параметры :

@using (Html.BeginForm(
    actionName: "Update", 
    controllerName: "CustomerServiceMessage", 
    routeValues: new { id = 0 }, 
    method: FormMethod.Post,
    htmlAttributes: new { @class = "foo" }
))
{
    ...    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...