2011-01-14 2 views
2

Я добавляю окно поиска в Asp Mvc.Как вы настраиваете URL-адрес формы с помощью Asp MVC?

Это HTML для формы:

@using (Html.BeginForm("Query", "Search", FormMethod.Get)) 
{ 
    <input type="text" name="q" /> 
    <input type="submit" value="Seach" /> 
} 

и я добавил этот маршрут

routes.MapRoute("Search", "q={query}", 
    new { controller = "Search", action = "Query" }); 

Я хотел бы форму, чтобы создать URL, который выглядит как http://localhost:####/q=value in textbox.

Можно ли изменить способ создания MVC URL-адреса? Это в настоящее время, что я получаю:

http://localhost:50916/Search/Query?q=value in textbox 

ответ

1

Согласно RFC 3986= знак является зарезервированным символ, используемый для разделения параметров и значений параметров, и вы не должны использовать его в этой части URI. Самое близкое, что вы можете получить, это http://localhost:####/?q=value.

На самом деле вы можете использовать такой маршрут, как входящий URL, и ASP.NET MVC правильно проанализирует его и отправит в правильное действие контроллера. Проблема связана с тегом <form>. Существует два возможных глагола: GET и POST. Если вы используете параметры POST, введенные в форму, они будут отправлены в тело запроса и не показаны в URL-адресе. Если вы используете GET в соответствии со спецификацией, пользовательские агенты отправят запрос, добавив пары ключей/значений входных полей в действие формы после добавления ?.

Таким образом, вы не можете достичь желаемого эффекта, если не используете какой-либо javascript, который обрабатывал бы событие формы onsubmit, отмените отправку по умолчанию и измените window.location на нужный формат. Вопрос в том, действительно ли вам нужно зайти так далеко?

+0

Хорошая точка. Я буду форматировать URL по-разному. – wusher

1

Вы можете просто использовать стандартный тег HTML-формы вместо HTML-помощника, если вам нужен более конкретный контроль над целевым URL.

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