使用get时,Mvc路由无效

时间:2013-03-06 20:00:18

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

我正在尝试让MVC生成正确的URL。

现在结果如下: http://domain.com/Live/Schedule?date=2013-03-29

它当然应该像这样正确地产生它: http://domain.com/Live/Schedule/2013-03-29

My Global.Asax

routes.MapRoute(
name: "LiveSchedule", // Route name
url: "Live/{action}/{date}", // URL with parameters
defaults: new { controller = "Live", action = "Schedule", date = UrlParameter.Optional }
);

触发请求的网页上的代码:

@using(Html.BeginForm("Schedule", "Live", FormMethod.Get))
{
<div>
    Specify a date: @Html.DropDownList("date", Model.SelectedDateList) <input type="submit" value="Display"/>
</div>
}

结果:

<form action="/Live/Schedule" method="get">                    
<div>
Select a date: <select id="date" name="date"><option value="2013-03-27">27 onsdag</option>
<option value="2013-03-28">28 torsdag</option>
<option selected="selected" value="2013-03-29">29 fredag</option>
<option value="2013-03-30">30 l&#246;rdag</option>
<option value="2013-03-31">31 s&#246;ndag</option>
...
</select> <input type="submit" value="Display"/>
</div>
</form>  

接受输入的控制器:

public ActionResult Schedule(string date)
{
    var model = getModel(date);
    return View(model);
}

我做错了什么?

1 个答案:

答案 0 :(得分:0)

你得到的是,它是生成get url的常规HTML,而不是ASP.NET MVC的功能。

根据规范(RFC1866,第46页; HTML 4.x第17.13.3节)声明:

  

如果方法是“get”且操作是HTTP URI,则为用户代理   采取行动的价值,附加一个“?”对它,然后附加表格   数据集,使用“application / x-www-form-urlencoded”编码   内容类型。