Значение данных представления Routelink всегда равно нулю - PullRequest
0 голосов
/ 24 октября 2009

У меня есть правило маршрутизации

 routes.MapRoute(
            "Search",                                                     // Route name
            "Restaurant/AdvancedSearch/{foodType}",                       // URL with parameters
            new { controller = "Restaurant", action = "AdvancedSearch", foodType = "" }  // Parameter defaults
        );

На мой взгляд, я хочу передать значение из списка выбора в routeLink

<% using (Html.BeginForm("SimpleSearch", "Restaurant")) { %>
    <div>
        <fieldset>
            <legend>Restaurant Search</legend>
            <label for="Food">Type of food:</label>
            <%= Html.DropDownList("Food", Model.FoodType, "-- Select --")%>

            <%= Html.RouteLink("Advanced search?", "Search", new { foodType=(ViewData["Food"]) })%>
      </fieldset>
    </div>
<% } %>

В моем контроллере значение foodType всегда равно null, а не id элемента выбранного значения?

public ActionResult AdvancedSearch(int? foodType)
    {
        return View();
    }

Ответы [ 2 ]

0 голосов
/ 24 октября 2009

Не видя вашего модельного класса, это трудно понять. Но я думаю, что вы хотите сделать это:

<%= Html.DropDownList("Food", ViewData["Food"], "-- Select --")%>
<%= Html.RouteLink("Advanced search?", "Search",new {foodType= Model.FoodType})%>

Предполагается, что ViewData["Food"] содержит IEnumerable<Seleclist>, а Model.FootType возвращает идентификатор типа пищи модели.

0 голосов
/ 24 октября 2009

Ваш RouteLink создан на стороне сервера, что означает, что он всегда будет статическим - foodType всегда будет равно значению ViewData["Food"]. Когда пользователь меняет выбор в раскрывающемся списке, вам нужно изменить ссылку на новое значение с помощью javascript. Вот как можно этого добиться:

$(function() {
    $('select#Food').change(function() {
        $('a').attr('href', '/Restaurant/AdvancedSearch/' + $(this).val());
    });
});

Примечание: у этого решения есть недостаток: если вы измените ваши маршруты, оно больше не будет работать, так как href жестко задан в javascript.

...