У меня крошечное приложение в MVC 3.
В этом крошечном приложении я хочу, чтобы мои URL были четкими и последовательными.
Там только один контроллер с одним действием с одним параметром.
Если значение не указано (то есть браузер запрашивает /
), то отображается форма для сбора этого единственного значения. Если указано значение, отображается страница.
Единственный маршрут такой:
routes.MapRoute(
"Default",
"{account}",
new { controller = "Main", action = "Index", account = UrlParameter.Optional }
);
Это все работает нормально, но параметр account
никогда не появляется в адресной строке как часть URL. Я могу вручную ввести test.com/some_account
, и он будет работать, но кроме этого, account
идет в качестве параметра записи и поэтому не отображается. И если я использую FormMethods.Get
в своей форме, к URL добавляется ?account=whatever
, что тоже не то, что я хочу, и это противоречит моему пониманию. Насколько я понимаю, инфраструктура MVC будет пытаться использовать параметры, установленные в маршруте, и только если не найдена, она добавит их после ?
.
Я пробовал различные варианты настройки маршрутов - один маршрут с параметром по умолчанию или один маршрут с обязательным параметром, или два маршрута (один с обязательным параметром и один без параметров); Я пытался смешать HttpGet
/ HttpPost
всеми возможными способами; Я пытался использовать метод одиночного действия с необязательным параметром string account = null
и два метода действия (один с параметром, другой без), но я просто не могу отобразить этот элемент в URL.
Я также ознакомился с книгой Стивена Сандерсона о MVC 3, но на скриншотах также нет параметров (отображается страница сведений для Kayak, но URL-адрес в адресной строке htpp://localhost:XXXX/
).
Единственное, что определенно работает и делает то, что я хочу, это
return RedirectToAction("Index", new { account = "whatever" });
Но чтобы сделать это, я должен сначала проверить необработанный входящий URL-адрес и не перенаправлять, если он уже содержит account
, в противном случае это бесконечный цикл. Это кажется слишком странным и ненужным.
Как правильно сделать, чтобы account
всегда отображался как часть URL?