BeginForm с нулевым контроллером и пропущенными параметрами действия - PullRequest
2 голосов
/ 07 декабря 2010

Я хочу добавить атрибут ID в мою форму, поэтому я следую за ответом здесь

Первоначально мой код использовал:

Html.BeginForm()

и вывод выглядит так:

<form action="/Controller/Action?Id=5" method="post">

но когда я заменяю Html.BeginForm () на:

Html.BeginForm(null, null, FormMethod.Post, new { @Id = "blah" });

в форме вывода отсутствует параметр:

<form action="/Controller/Action" method="post">

Кажется, все работает "волшебно", если я заменяю BeginForm на <form action="" method="post">, но я бы хотел понять, что не так с версией помощника.

1 Ответ

1 голос
/ 07 декабря 2010

Вы пытаетесь использовать эту версию метода, правильно?

<ExtensionAttribute> _
Public Shared Function BeginForm ( _
    htmlHelper As HtmlHelper, _
    actionName As String, _
    controllerName As String, _
    method As FormMethod, _
    htmlAttributes As Object _
) As MvcForm

Пара вещей:

  1. htmlAttributes isатрибуты вашего тега формы, и не имеет ничего общего с частью? Id = 5 вашей строки запроса.

  2. Почему ваша переменная "Id" имеет префикс "@"тем не мение?Но опять же, из-за № 1 выше, это не имеет значения.Вам не нужно это использовать.

  3. Я предполагаю, что Html.BeginForm () "просто работает", потому что вы просматриваете это как результат запроса GET на / Controller / Action / 5 .Тогда POST по умолчанию будет иметь тот же URL.

  4. То же самое происходит, если вы это сделаете - в HTML, когда вы указываете пустую строку ("") для URI впараметр действия, он будет интерпретировать это как текущий URI.См. RFC 2396 :

    4.2.Ссылки на тот же документ

    Ссылка на URI, которая не содержит URI, является ссылкой на текущий документ.Другими словами, пустая ссылка URI в документе интерпретируется как ссылка на начало этого документа, а ссылка, содержащая только идентификатор фрагмента, является ссылкой на идентифицированный фрагмент этого документа.Обход такой ссылки не должен приводить к дополнительному поисковому действию. Однако, если ссылка на URI встречается в контексте, который всегда предназначен для получения нового запроса, как в случае элемента FORM в HTML, тогда пустая ссылка на URI представляет базовый URI текущего документа и должна быть замененапо этому URI при преобразовании в запрос.

Это отвечает на ваши вопросы?

Редактировать: Ах, я понимаю, что вы сейчас спрашиваете.Я не уверен, почему передача null не включает в себя тот же URI.Если вы явно указываете имя действия и имя контроллера, это работает?Я сделал это таким образом в приложениях MVC, и он работал правильно.

...