【发布时间】:2013-06-12 05:48:31
【问题描述】:
这里与朱利安的情况类似: MVC - Route with querystring
我无法掌握如何使用 GET 请求、已定义的路由和表单中的值来操作表单。
(编辑:在问题方面与 Julian 的问题基本相同,但在 javascript 库和/或自定义路由方面询问特定解决方案(而不是一般区域并解释为什么存在问题和需要不同的方法给定的代码);也没有使用 global.asax;超过一年的问题意味着其他选项也可能可用。)
作为初学者,很难在大量的客户端库中走得更远,并且不知道从哪里开始使用相关的自定义路由提供程序,但是对于保持服务器端路由和 301 重定向的简单性来说,这似乎更可取。
尝试了不同的路线(显然不是“自定义”)并查看了许多库,但确实没有取得任何切实的进展。
任何简单的指针,例如路由示例/关键字/链接,简单的客户端代码示例(对于此上下文等)将非常有用。
使用thistutorial创建电影搜索页面,按title和genre。]
这是我的具体代码:
路由配置:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Movies",
url: "{controller}/{action}/{title}/{genre}",
defaults: new
{
controller = "Home",
action = "Index"
}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
}
);
}
ActionResult:
public ActionResult SearchIndex(string title, string genre)
{
var genreQuery = from g in db.Movies
orderby g.Genre
select g.Genre;
var genres = new List<string>();
genres.AddRange(genreQuery.Distinct());
ViewBag.Genre = new SelectList(genres);
var movies = from m in db.Movies
select m;
if (!string.IsNullOrEmpty(title))
{
movies = movies.Where(s => s.Title.Contains(title));
}
if (!string.IsNullOrEmpty(genre))
{
movies = movies.Where(s => s.Genre == genre);
}
return View(movies);
}
SearchIndex.cshtml:
@model IEnumerable<DefaultMvcIA.Models.Movie>
@{
ViewBag.Title = "SearchIndex";
}
<h2>SearchIndex</h2>
<p>
@Html.ActionLink("Create New", "Create")
@using (Html.BeginForm("SearchIndex", "Movies", FormMethod.Get))
{
<p>Genre: @Html.DropDownList("Genre", "All")
Title: @Html.TextBox("Title")<br />
<input type="submit" value="Filter" /></p>
}
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Title)
</th>
<th>
@Html.DisplayNameFor(model => model.ReleaseDate)
</th>
<th>
@Html.DisplayNameFor(model => model.Genre)
</th>
<th>
@Html.DisplayNameFor(model => model.Price)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReleaseDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Genre)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.MovieID }) |
@Html.ActionLink("Details", "Details", new { id=item.MovieID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.MovieID })
</td>
</tr>
}
</table>
问题 在 GET 请求上,浏览器只使用查询字符串,而不是在 RouteConfig 中设置路由(可以理解)。需要编写自定义路由以将这些查询字符串重定向到路由或使用客户端库。具体信息真的很有用,因为那里有许多不同的路由库,但不知道从哪里开始(首选)301 自定义路由方法。
【问题讨论】:
-
你有sn-ps代码吗?
-
更多关于downvote的信息表示赞赏。了解类似的问题,但到目前为止还没有找到关于自定义路由和库的答案,而不仅仅是链接和语句。
-
不清楚您要的是什么。朱利安的问题很具体。你的没有显示任何代码,或者告诉我们你所面临的问题。您要求“与场景相关的客户端库代码”,但我不知道场景是什么。
-
已编辑问题:希望更清楚它与链接问题密切相关,但只是要求有用的相关 sn-ps/链接作为许多库和许多路由选项,所以基思的两点没有帮助我进步。
-
请举例说明您收到的带有查询的帖子网址类型以及您希望它做什么。
标签: javascript jquery asp.net-mvc asp.net-mvc-4 url-routing