MVC返回特定链接

时间:2014-04-14 07:46:48

标签: asp.net-mvc redirect asp.net-mvc-routing

我如何根据我的来源返回特定链接?

我有一个管理面板,这允许从2个不同的地方删除答案。所以现在我希望能够将用户重定向到他来自的链接

所以这些是链接:

/Answer/Index -> /Answer/Delete/{id}
/Statement/Edit/1 -> /Answer/Delete/{id}

我做了一些研究并找到了这个

 return Redirect(ControllerContext.HttpContext.Request.UrlReferrer.ToString());

所以我在我的控制器中使用它

  public ActionResult Delete(int id = 0)
    {
        answer answer = db.answer.Find(id);
        if (answer == null)
        {
            return HttpNotFound();
        }
        return View(answer);
    }

    //
    // POST: /Answer/Delete/5

    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public ActionResult DeleteConfirmed(int id)
    {
        answer answer = db.answer.Find(id);
        db.answer.Remove(answer);
        db.SaveChanges();
        return Redirect(ControllerContext.HttpContext.Request.UrlReferrer.ToString());
    }

问题是这个重定向到/ Answer / Delete / {id}而不是之前的链接。 我怎么能这样做?

解决方案感谢Ashwini Verma

Ashwini Verma的解决方案在进行此更改后正常工作

 public ActionResult DeleteConfirmed(int id, Uri PreviousUrl)
    {
        answer answer = db.answer.Find(id);
        db.answer.Remove(answer);
        db.SaveChanges();
        return Redirect(PreviousUrl.ToString());

    }

2 个答案:

答案 0 :(得分:1)

你应该在DeleteConfirmed()中删除Delete()中的Request.UrlReferrer。 请按照此步骤操作。

为地址模型创建一个名为PreviousUrl的新字段。

public class Address
{
    ...
    public string PreviousUrl  { get; set; }
}

在视图模型中保留以前的网址。

    public ActionResult Delete(int id = 0)
    {
        Answer answer = db.answer.Find(id);
        if (answer == null)
        {
            return HttpNotFound();
        }

        // get the previous url and store it with view model
        answer.PreviousUrl = System.Web.HttpContext.Current.Request.UrlReferrer;

        return View(answer);
    }

将其添加到隐藏字段

    @using (Html.BeginForm())
    {
        ...
        <input type="hidden" name="PreviousUrl" value="@Model.PreviousUrl" />
    }

基于Model.PreviousUrl重定向

    public ActionResult DeleteConfirmed(int id)
    {
        return RedirectToAction(model.PreviousUrl);
    }

答案 1 :(得分:0)

一个非常简单的解决方案是使用额外的查询字符串参数生成您的出站网址链接,以确定它是从哪个页面开始,

您也可以使用enum作为页面或任何硬代码值

example of querystring append on action link

将帮助您生成查询字符串参数

的操作链接
 <%= Html.ActionLink("Check this", "Edit", "test", 
    new { page = 2 }, new { style = "display:block" })%>

以及你的帖子方法,

查看页面参数并相应地重定向