2014-02-08 5 views
0

Я новичок в asp.net mvc4 и попытаюсь получить некоторую практику сейчас. после некоторых исследований о маршрутизации я все же получил проблему с передачей параметров после отправки формы..net MVC4 Форма submit генерирует? вместо/in url - неправильная маршрутизация?

моя форма выглядит следующим образом:

@using (Html.BeginForm("Index", "Resplaner", FormMethod.Get, new { name = "navigation", id = "navigation" })) 
{ 
    <select name="id" size="15" id="nav_menu"> 
     @foreach (var categorie in Model.Categories) 
     { 
      <optgroup label="@categorie.Name"> 
       @foreach (var ressource in Model.Ressources) 
       { 
        if (@categorie.Id == ressource.Type) 
        { 
         <option value="@ressource.Id">@ressource.Name</option> 
        } 
       } 
      </optgroup> 
     } 
    </select> 
} 

который представлен следующим Яваскрипт:

$('#nav_menu').on('click', function (event) { 
      if ($(event.target).is("option")) { 
       var form = $(event.target).parents('form'); 
       form.submit(); 
      } 
     }); 

моих реальных маршрутов сконфигурировано так:

routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 

      routes.MapRoute(
       name: "Resplaner", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Resplaner", action = "Index", id = UrlParameter.Optional } 
      ); 

так мой проблема в том, что мой сгенерированный URL-адрес после отправки формы выглядит так:

http://localhost:62456/Resplaner?id=6

но мой желаемый вид URL должен выглядеть следующим образом

http://localhost:62456/Resplaner/Index/6

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

Я уже сделал несколько примеров учебников о формах в mvc4, но они всегда используются в другом случае, таком как my. поэтому я был бы рад помочь.

я благодарен за каждую помощь :)

приветствия Керн

+0

Вместо того, чтобы устанавливать «null» для своих действий и значений контроллера, на самом деле положите их в свой оператор 'Html.BeginForm()' – Tommy

+0

, вы правы, исправили его. но моя проблема все та же :) – KURN

+0

Мой второй комментарий: ваши два маршрута - то же самое. Значения по умолчанию не заставят механизм маршрута выбрать один из них. Удалите второй маршрут и сообщите мне результаты. – Tommy

ответ

0

Здесь идет мое решение -

иметь ваш HTML, как это -

@using (Html.BeginForm("Index", "Resplaner", new { name = "rami", id = "1" }, FormMethod.Get)) 
{ 
    // .... 
} 

Тогда есть маршрут таким образом, -

routes.MapRoute(
     name: "MyRoute", 
     url: "{controller}/{action}/{name}/{id}", 
     defaults: new { controller = "Resplaner", action = "Index" } 
    ); 

Тогда ваш JQuery хиты отправки формы, ваш URL будет -

enter image description here

И URL будет - http://localhost:5738/Resplaner/Index/rami/1?

ПРИМЕЧАНИЕ: Если вы не хотите, что вопрос отметьте в конце, затем сделайте POST вместо GET.

Другим решением было бы использование скрытых полей -

@using (Html.BeginForm("Index", "Resplaner", FormMethod.Get)) 
{ 
    @Html.Hidden("id", "1"); 
    @Html.Hidden("name", "rami"); 
    <input type="submit" value="click"/> 
} 

Но опять-таки этот подход даст вам - http://localhost:5738/Resplaner/Index?id=1&name=rami

Еще одна альтернатива заключается в создании @Html.ActionLink() с требуемым URL и сделать его нажмите в jquery.

+0

спасибо за подробный ответ. Я попробовал ваше первое решение. проблема здесь в том, что идентификатор фиксирован. результат этого решения ищет меня так: http: // localhost: 62456/Resplaner/Index/1? id = 11'. Сегодня у меня нет времени для проведения дополнительных тестов. ваши последние решения кажутся мне лучшими. я поеду с actionlinks и брошу идею о форме. – KURN

+0

@KURN, у вас есть правильные маршруты на месте, как показано мне? – ramiramilu

+0

да, я выполнил весь ваш код 1: 1, чтобы проверить его. странным для меня является то, что исходный код html изменяется на этот '' form action = "/ Resplaner/Index/rami/1" id = "navigation" method = "get" name = "navigation"> '. но даже путь actionlink, кажется, самый простой: – KURN

0

ОК исправил его по-другому.

Чтобы исправить мою фактическую проблему, я просто добавил новое действие в свой контроллер, который получает параметр формы с вопросительным знаком и просто перенаправляет на нужный URL-адрес.

[HttpGet] 
public ActionResult IndexMap(String id = "1") 
{ 
    return RedirectToAction("Index", "Resplaner", new { id = id }); 
} 

Это может быть не лучший способ сделать это из-за второго вызова сервера. но для моего проекта я не вижу проблем с производительностью, так как он будет использоваться только в интрасети.

http://localhost:62456/Resplaner/IndexMap?id=2 будет перенаправлять http://localhost:62456/Resplaner/Index/2

Я хотел бы поблагодарить всех, кто пытался мне помочь. Вы дали мне несколько замечательных предложений и идей.

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