从asp.net mvc中的action方法返回url

时间:2010-02-02 16:50:42

标签: c# asp.net-mvc

我正在使用asp.net mvc。

我有与“文档”列表相关联的链接...单击链接时会调用一个操作方法将文档添加到收藏夹列表中。

在单击“添加收藏夹”链接之前,如何在操作方法中返回到同一页面? 原因是我想维护具有分页等的查询字符串参数

例如:

我的页面

第1页,共3页

Document1 [添加到收藏夹](调用操作方法的链接)

Document2 [添加到收藏夹](调用操作方法的链接)

Document3 [添加到收藏夹](调用操作方法的链接)

Document4 [添加到收藏夹](调用操作方法的链接)

使用查询字符串参数在URL中维护分页..

当他们点击添加时,我希望能够维护网址,因为它应该考虑到它的页码

5 个答案:

答案 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);
}