我有一个路由规则
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();
}
答案 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。