首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C# ASP.NET MVC返回上一页

C# ASP.NET MVC返回上一页
EN

Stack Overflow用户
提问于 2012-03-19 23:26:36
回答 4查看 117.8K关注 0票数 77

我的控制器中有一个基本的Edit方法,当编辑成功时,它会重定向回顶级列表(“Index”)。MVC搭建后的标准行为。

我正在尝试更改此Edit方法以重定向回上一页(而不是索引)。因为我的Edit方法没有使用默认的映射输入参数“id”,所以我首先尝试使用它来传入前面的URL。

在我的Edit“get”方法中,我使用下面这一行来抓取前面的URL,它工作得很好:

代码语言:javascript
复制
ViewBag.ReturnUrl = Request.UrlReferrer;

然后,我使用表单标记将此返回URL发送给Edit“post”方法,如下所示:

代码语言:javascript
复制
@using (Html.BeginForm(new { id = ViewBag.ReturnUrl }))

这就是轮子掉下来的地方。我无法从id参数中正确解析URL。

*更新:已解决的***

以Garry的例子为指导,我将参数从"id“更改为"returnUrl”,并使用隐藏字段传递参数(而不是表单标记)。学到的教训:只使用"id“参数,并保持其简单性。它现在起作用了。下面是我更新的代码和注释:

首先,我像第一次一样使用Request.UrlReferrer抓取前面的URL。

代码语言:javascript
复制
    //
    // GET: /Question/Edit/5

    public ActionResult Edit(int id)
    {
        Question question = db.Questions.Find(id);
        ViewBag.DomainId = new SelectList(db.Domains, "DomainId", "Name", question.DomainId);
        ViewBag.Answers = db.Questions
                            .AsEnumerable()
                            .Select(d => new SelectListItem
                            {
                                Text = d.Text,
                                Value = d.QuestionId.ToString(),
                                Selected = question.QuestionId == d.QuestionId
                            });
        // Grab the previous URL and add it to the Model using ViewData or ViewBag
        ViewBag.returnUrl = Request.UrlReferrer;
        ViewBag.ExamId = db.Domains.Find(question.DomainId).ExamId;
        ViewBag.IndexByQuestion = string.Format("IndexByQuestion/{0}", question.QuestionId);
        return View(question);
    }

现在,我使用表单中的隐藏字段将returnUrl参数从模型传递给HttpPost方法:

代码语言:javascript
复制
@using (Html.BeginForm())
{
    <input type="hidden" name="returnUrl" value="@ViewBag.returnUrl" />
    ...

在HttpPost方法中,我们从隐藏字段中提取参数并重定向到它...

代码语言:javascript
复制
    //
    // POST: /Question/Edit/5

    [HttpPost]
    public ActionResult Edit(Question question, string returnUrl) // Add parameter
    {
        int ExamId = db.Domains.Find(question.DomainId).ExamId;
        if (ModelState.IsValid)
        {
            db.Entry(question).State = EntityState.Modified;
            db.SaveChanges();
            //return RedirectToAction("Index");
            return Redirect(returnUrl);
        }
        ViewBag.DomainId = new SelectList(db.Domains, "DomainId", "Name", question.DomainId);
        return View(question);
    }
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9772947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档