ASP.NET MVC и перезапись URL - PullRequest
1 голос
/ 13 мая 2011

В моем контроллере у меня есть 4 ActionResult (Показать, Поиск, Изменить и Удалить) для просмотра.Для последних 3 есть RedirectToAction () как Actionesult, и в Route у меня есть такой пользовательский код:

routes.RouteMap("Detail", "/Show/{id}", new { controller : "Administration", action : "Show", id : UrlParameters.Optional });

Мне нужно добавить 2 параметра в URL, когда я получу результат поиска.Эти 2 параметра отправляются в POST.Как добавить эти параметры в перезаписи URL как есть?

Когда я захожу в представление

http://localhost/Show/1

После поиска

http://localhost/Show/1/foo/foo

Спасибо за помощь:)

[EDIT] После некоторого теста я нашел решение.Формы и Контроллер находятся в POST, если только Show (GET | POST).

Существует 2 маршрута:

routes.MapRoute(
                "RechercheEtablissementGucps",
                "DetailGucps/{idGucps}/{CategorieEtablissementValue}/{SearchField}",
                new { controller = "Administration", action = "AfficheDetailGuCPS", idGucps = UrlParameter.Optional, CategorieEtablissementValue = UrlParameter.Optional, SearchField = UrlParameter.Optional }
            );

routes.MapRoute(
                "Gucps", // Route name
                "DetailGucps/{idGucps}", // URL with parameters
                new { controller = "Administration", action = "AfficheDetailGuCPS", idGucps = UrlParameter.Optional } // Parameter defaults
            ); 

У меня есть параметры по желанию, если я ищу, и ничего, если другое действиесделано

/DetailGucps/29/DIR/fr

Ответы [ 3 ]

1 голос
/ 13 мая 2011

по сути то, что вы делаете, мне кажется неправильным.

Похоже, вы пытаетесь передать параметры запроса как значения маршрута .

Также существует проблема с использованием более одного необязательного параметра для маршрутизации, см .:

http://haacked.com/archive/2011/02/20/routing-regression-with-two-consecutive-optional-url-parameters.aspx

В вашем действии задайте ожидаемые параметры, например:

public ActionResult Show(int ID, string param1 = null, int? param2 = null)
{
    return View(/*.GetShow(ID, param1, param2)*/);
}

[HttpMethod.Post]
public ActionResult Show(FormCollection collection)
{
    return RedirectToAction("Show", new { ID = collection["ID"], param1 = collection["param1"], param2 = collection["param2"] });
}

Если вы поняли:)

1 голос
/ 13 мая 2011
routes.RouteMap("Detail", "/Show/{id}/{p1}/{p2}", new { controller : "Administration", action : "Show", id : UrlParameters.Optional, p1: UrlParameters.Optional, p2: UrlParameters.Optional });

и добавьте новые параметры в подпись целевых действий.

0 голосов
/ 13 мая 2011

Если вы хотите опубликовать результаты поиска в действии, а затем перенаправить в действие, вы должны использовать атрибут [AcceptVerbs (HttpVerbs.Post)] и FormCollection вместо именования параметров Post в определении маршрутизации.Таким образом, вы должны определить только маршрут показа:

        routes.MapRoute(
            "Show", // Route name
            "Administration/Show/{id}", // URL with parameters
            new { controller = "Administration", action = "Show", 
                       id = UrlParameter.Optional } // Parameter defaults
        );

Атрибуты HttpVerb обеспечат правильную маршрутизацию вашего сообщения при публикации:

    [AcceptVerbs(HttpVerbs.Get)]
    public ActionResult Show(int? id)
    {
        var showViewModel = new ShowViewModel();

        // ... populate ViewModel

        return View(showViewModel);
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Modify(FormCollection form)
    {
        var id = form["id"];
        var p1 = form["p1"];
        var p2 = form["p2"];

        // ... Modify

        return RedirectToAction("Show", new { id = id });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...