Routelink viewdata值始终为null

时间:2009-10-24 17:12:23

标签: asp.net-mvc asp.net-mvc-routing

我有一个路由规则

 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 :(得分:0)

您的RouteLink是在服务器端构建的,这意味着它始终是静态的 - foodType将始终等于ViewData["Food"]的值。当用户更改下拉列表中的选择时,您需要使用javascript修改新值的链接。以下是您如何实现这一目标:

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

备注:此解决方案有一个缺点:如果您修改路由,它将不再有效,因为href在javascript中是硬编码的。

答案 1 :(得分:0)

没有看到你的模特课,很难知道。但我想你想这样做:

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

假设ViewData["Food"]包含IEnumerable<Seleclist>Model.FootType返回模型食物类型的ID。