mvc2 - получение URL для отражения отправки формы - PullRequest
0 голосов
/ 29 октября 2010

У меня есть приложение MVC2 с формой (как у тебя).Пользователь вводит запрос в форму (в представлении / Cars / Index) и нажимает кнопку «отправить», которая отправляет действие CarsController Details - представление Details отображает результаты, и все в порядке.и хорошо.

Пользователь может ввести URL (например, / Cars / Details / 123-125), и он получит представление Details с отображенными 123, 124 и 125, так же, как если бы вы ввели егоформа.Также хорошо.

Что я хочу включить, если это возможно, это то, что когда пользователь вводит "123-125" или что-то еще в форме, URL также отражает результаты - вместо "/ Cars / Details"для URL, который сейчас отображается, я хочу, чтобы он показывался" /Cars/Details/123-125".

На самом деле, я не могу понять, как это должно быть сделано.

Любая помощь приветствуется.

Ответы [ 3 ]

0 голосов
/ 29 октября 2010

Звучит так, будто не найдено подходящего определения маршрута для / Cars / Details / 123-125. Я думаю, что это могло произойти из-за того, как работает механизм маршрутизации.

Ограничения маршрута ASP.NET MVC в формате {ID} - {Slug}

0 голосов
/ 04 ноября 2010

Хорошо, вот ответ, который я придумал:

Вкратце: перенаправить на GET

Обычно я пишу действие с атрибутом [HttpPost], которое перенаправляет отправку формы другому действию с атрибутом [HttpGet]. Маршрут работает независимо от того, отправляете ли вы форму или вводите URL-адрес вручную.

[HttpPost]
    public ActionResult Details(CarViewModel model, int? pageNbr) {
    // simply takes the form POST and re-routes it as a GET to pretty up the URL
    // (see second Details action)
        int page = pageNbr ?? 0;

        return RedirectToAction("Details", new { query = model.Query, pageNbr = page });
    }

    [HttpGet]
    public ActionResult Details(CarViewModel model, int pageNbr)
    {
        // various magic to create the view...

        return View(avm);
    }

В качестве дополнительного бонуса, это касается "Вы уверены, что хотите повторить?" раздражение, когда кто-то обновляет страницу или нажимает кнопку НАЗАД в своем браузере.

0 голосов
/ 29 октября 2010

Измените вашу форму на GET вместо POST метода (по умолчанию используется POST), и он должен просто работать.

<% using (Html.BeginForm("Action", "Controller", FormMethod.Get)) { %>
...