Asp.net mvc Routelink viewdata值始终为空
我有路由规则Asp.net mvc Routelink viewdata值始终为空,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我有路由规则 routes.MapRoute( "Search", // Route name "Restaurant/AdvancedSearch/{foodType}", // URL with parameters new { controller = "Restaura
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>
<% } %>
您的RouteLink是在服务器端构建的,这意味着它将始终是静态的-
foodType
将始终等于ViewData[“Food”]
的值。当用户更改下拉列表中的选择时,需要使用javascript用新值修改链接。以下是您可以实现此目标的方法:
$(function() {
$('select#Food').change(function() {
$('a').attr('href', '/Restaurant/AdvancedSearch/' + $(this).val());
});
});
备注:此解决方案有一个缺点:如果修改路由,它将不再工作,因为href是用javascript硬编码的。如果看不到模型类,很难知道。但我认为你想这样做:
<%= Html.DropDownList("Food", ViewData["Food"], "-- Select --")%>
<%= Html.RouteLink("Advanced search?", "Search",new {foodType= Model.FoodType})%>
假设ViewData[“Food”]
包含IEnumerable
和模型。FootType
返回模型食品类型的ID
<%= Html.DropDownList("Food", ViewData["Food"], "-- Select --")%>
<%= Html.RouteLink("Advanced search?", "Search",new {foodType= Model.FoodType})%>