我正在使用asp.net mvc。
我有与“文档”列表相关联的链接...单击链接时会调用一个操作方法将文档添加到收藏夹列表中。
在单击“添加收藏夹”链接之前,如何在操作方法中返回到同一页面? 原因是我想维护具有分页等的查询字符串参数
例如:
第1页,共3页
Document1 [添加到收藏夹](调用操作方法的链接)
Document2 [添加到收藏夹](调用操作方法的链接)
Document3 [添加到收藏夹](调用操作方法的链接)
Document4 [添加到收藏夹](调用操作方法的链接)
使用查询字符串参数在URL中维护分页..
当他们点击添加时,我希望能够维护网址,因为它应该考虑到它的页码
答案 0 :(得分:0)
您不能只将当前页面添加到action参数吗?
public ActionResult AddFavourite(int? page)
{
// generate your paged into based on page parameter
return View(whatever_your_paged_view_is);
}
答案 1 :(得分:0)
一种可能的方法是在文档列表中的每个链接中包含所需的QueryStrings
。您可以通过ViewData将所需的查询字符串传递给显示文档列表的视图。
<% foreach(var doc in Model) { %>
<%= ActionLink(doc.Title, "AddtoFavorites", new { Page = ViewData["PageNumber"], Query = ViewData["Query" }) %>
<% } %>
或类似的东西。
然后在动作方法中,您将文档添加到“收藏夹”:
public ActionResult AddToFavorites(int documentID, int page, string query)
{
// Do the work to add the document to favorites
return RedirectToAction("ActionName", new { Page = page, Query = query}); // where "ActionName" is the name of the action that the user was on before they got here
}
另一种方法是将分页信息存储在TempData中,但如果您希望用户点击多个链接,这会使事情变得复杂。
答案 2 :(得分:0)
如果javascript是一个选项,请调用javascript:history.back()
答案 3 :(得分:0)
您可以使用Request.UrlReferrer
获取上一个网址。它是http协议的一部分,由浏览器作为http标头发送。请记住,如果它与请求一起发送,则取决于浏览器/客户端实现,并且可能并不总是在那里。
根据我的最佳选择是将您的参数直接添加到链接。
答案 4 :(得分:0)
我会在额外的参数returnUrl
中发送页面,.NET团队自己也在AccountController
使用此模式:
<%= Html.ActionLink("LINKNAME", "ACTION", new { id = "DOCID", returnUrl = Request.Url.PathAndQuery } ) %>
现在你的行动看起来像是:
public ActionResult ACTION(int id, string returnUrl)
{
//do some stuff
return Redirect(returnUrl);
}