假设我在网页中有以下内容
<% using (Html.BeginForm("ShowData", "Summary")) %>
<% { %>
<div class="dropdown"><%=Html.DropDownList("CourseSelection", Model.CourseList, new { @class = "dropdown", onchange="this.form.submit();" })%> </div>
<% } %>
当用户从下拉列表中进行选择时,表单已提交,我希望它链接到另一个带有URL的页面,如下所示:
http://localhost:1721/Summary
我有以下路线:
routes.MapRoute(null, "Summary", new { controller = "Summary", action = "ShowData", CourseSelection = (string) null });
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Login", action = "Index", id = UrlParameter.Optional });
当用户选择下拉列表中的项目时,返回的URL为:
http://localhost:1721/Summary/ShowData?CourseSelection = UserSelection
显然,列表中的第一条路线未匹配。
我不希望URL显示操作名称和参数。我只是想显示“摘要”,这是我在URL中硬编码的内容。我如何实现这一目标?
答案 0 :(得分:2)
此处的问题是您的路线有默认值
CourseSelection =(string)null
这不是路线网址的一部分(又名“摘要”)。
在生成URL的任何默认值时都有特殊的逻辑,其中参数在URL中不,您指定的参数必须与默认值匹配。
另一种解决方法是:
using (Html.BeginForm("ShowData", "Summary",
new {CourseSelection = (string)null})) {
...
}
但是,由于您将该值发布到操作中,因此我不明白为什么您在路径中将CourseSelection作为默认值。您只需要它作为一个动作方法参数,它将在发布的表单数据中自动绑定。
所以另一种解决方案是改变你的路线:
routes.MapRoute(null, "Summary",
new { controller = "Summary", action = "ShowData" });
答案 1 :(得分:0)
当您查看html源时,
<% using (Html.BeginForm("UpdateView", "MyController")) %>
<% { %>
<div class="dropdown"><%=Html.DropDownList("Selection", Model.List, new { onchange="this.form.submit();" })%></div>
<% } %>
您会注意到该操作为空。这是因为帮助程序无法根据您在BeginForm中提供的内容查找路径。
根据您在Global.asax中的定义,所有请求都将默认为Index操作方法。你想要的是:
routes.MapRoute("Default", "{controller}/{action}", new { controller = "Home", action = "Index" });
请注意URL模式中操作的附加项。
这适合我。
Global.asax中
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(null, "Summary", new { controller = "Summary", action = "ShowData", CourseSelection = (string)null });
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Login", action = "Index", id = UrlParameter.Optional });
}
SummaryController
public class SummaryController:Controller { // // GET:/ Summary /
public ActionResult Index()
{
return View();
}
public ActionResult ShowData(string CourseSelection)
{
return View();
}
默认视图中的代码
<%
var list = new List<string> { "a", "b", "c" };
var selList = new SelectList(list); %>
<% using (Html.BeginForm("ShowData", "Summary")) %>
<% { %>
<div class="dropdown">
<%=Html.DropDownList("CourseSelection", selList, new { @class = "dropdown", onchange="this.form.submit();" })%>
</div>
<% } %>
}