【发布时间】:2016-04-07 04:47:21
【问题描述】:
我需要一些帮助,我尝试了一切,将路由值传递给我的 URL,但我仍然遇到同样的问题。我想从 TextBox (movieTitle) 和 DropDownList (languageID) 中获取路线值。对于 TextBox,我也在使用 jquery 自动完成功能。单击按钮后,我想将用户重定向到包含电影详细信息的新页面。问题出在我的路由上,因为详细信息页面看起来像这样,只有控制器名称和操作名称:
Movie/MyMovie
我想实现这样的目标:
Movie/movieTitle-languageID
但由于某种原因,我的路由忽略了searchTerm(电影标题)和searchQ(语言ID)
当然,我尝试将Model.Movie.MovieID 的路由值传递给@using(Html.BeginForm()),但它给我一个错误,这是可以理解的。你们有什么想法可以解决这个问题吗?
这是我的自动完成操作:
public JsonResult GetMovie(string term)
{
List<string> movies;
var viewModel = new ViewModel
{
Movies = db.Movies.Where(x => x.MovieTitle.StartsWith(term)).ToList(),
Languages = db.Languages.ToList()
};
movies = db.Movies.Where(x => x.MovieTitle.StartsWith(term)).Select(y => y.MovieTitle).ToList();
return Json(movies, JsonRequestBehavior.AllowGet);
}
这是我的看法:
@using (Html.BeginForm("MyMovie", "Movie", FormMethod.Post))
{
<b>Movie Title:</b>
@Html.TextBox("searchTerm", null, new { id = "txtSearch" })
@Html.DropDownListFor(x => x.Language.LanguageId, new SelectList(Model.Languages, "LanguageId", "LanguageName", Model.Languages.First().LanguageId), new { Name = "searchQ" })
<input type="submit" id="sss" value="Search" />
}
自动完成:
$('#txtSearch').autocomplete({
source: '@Url.Action("GetMovie")'
});
还有我的动作 MyMovie:
[HttpPost]
public ActionResult MyMovie(string searchTerm, int searchQ)
{
//string decodedGenre = HttpUtility.UrlDecode(searchTerm);
var viewModel = new ViewModel
{
Movie = db.Movies.Where(x => x.MovieTitle == searchTerm).FirstOrDefault(),
//Subtitles = db.Subtitles.Where((x => x.LanguageId == searchQ)
Subtitles = db.Subtitles.Where(x => x.LanguageId == searchQ && x.MovieTitle == searchTerm)
};
return View(viewModel);
}
路由配置:
routes.MapRoute(
name: "MyMovie",
url: "Movie/MyMovie/{searchTerm}-{searchQ}",
defaults: new { controller = "Movie", action = "MyMovie" },
constraints: new { searchTerm = @"[\w& ]+" }
);
我还想将movieID 传递给我的动作MyMovie 并将其传递给URL,但我真的不知道该怎么做,因为在我的TextBox 中我只传递了字符串MovieTitle。多亏了这一点,我可以更改 MyMovie 操作以通过他的 ID 搜索电影,--- 例如:Movie = db.Movies.Find(id)
这也是我的 ViewModel 也许它会以某种方式帮助你。
public class ViewModel
{
public Movie Movie { get; set; }
public IEnumerable<Movie> Movies { get; set; }
public Genre Genre { get; set; }
public IEnumerable<Genre> Genres { get; set; }
public Language Language { get; set; }
public IEnumerable<Language> Languages { get; set; }
public Subtitle Subtitle { get; set; }
public IEnumerable<Subtitle> Subtitles { get; set; }
public Comment Comment { get; set; }
public IEnumerable<Comment> Comments { get; set; }
}
//好的,小更新。我将方法从 POST 更改为 GET,现在我的 URL 看起来像这样,但仍然无法得到我想要的。
Movie/MyMovie?searchTerm=Ant+Man&searchQ=1
【问题讨论】:
-
您是在默认路线之前还是之后添加了“MyMovie”路线?
-
之前是这样,但之后什么都没有发生。
-
我看到您正在使用 jQuery 自动完成功能,您是否希望用户找到一部电影,使用文本框选择它,选择一种语言,然后单击搜索导航到该电影的详细信息页面那种语言?
标签: jquery asp.net-mvc routing