繁体   English   中英

如何使用同一控制器ActionResult重定向到不同页面?

[英]how can I re-direct to different pages using the same controller ActionResult?

我有两个使用相同ActionResult的视图。 最初只有一种观点,但现在需要第二种观点。

视图是-“索引”和“接受”索引

    [HttpGet]
    public ActionResult Index(string status, string message)
    {
        var InboxStatus = InboxStatus.New;

        if (!Enum.TryParse(status, out inboxStatus))
            inboxStatus = InboxStatus.New;

        var model = new InboxModel();
        model.Status = inboxStatus.ToString();

        model.InboxMailCount = GetInboxMailCount();
        model.InboxMailCount.Status = InboxStatus.ToString();

        @ViewBag.Message = message;

        return View(model);
    }

接受

       [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Accept(InboxModel model)
    {
        if (ModelState.IsValid)
        {
            var inboxmail = _repo.GetById(model.ID);

            inboxmail.Status = (int)ReferralStatus.Accepted;
            inboxmail.AcceptedByUserId = UserId;
            inboxmail.AcceptenceDateTime = DateTime.Now;

            _uow.SaveChanges();

            return RedirectToAction("Index", new { Message = "Accepted Successfully" });
        }

        return View(model.ID.ToString());
    }

该动作结果称为“拒绝”,问题是该动作结果包含以下内容...

  [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Decline(InboxModel model)
    {
        if (ModelState.IsValid)
        {
            var InBox = _repo.GetById(model.ID);

            InBox.Status = (int)ReferralStatus.Declined;
            InBox.DeclinedByUserId = UserId;
            InBox.DeclinedDateTime = DateTime.Now;

            _uow.SaveChanges();


            return RedirectToAction("Index", new { Message = "Declined Successfully" });
        }

        return Accept(model.ID.ToString());
    }

因此,如果用户在任一页面上选择了“已拒绝”操作,则无论他们在“已接受”视图上执行该操作,它们都将被重定向到“索引”。 说得通,? 我想将他们重定向回他们来自的页面。

请注意,这是我目前正在重定向到“已接受”的其他操作方式...

由于索引中的列表取决于“状态”属性...索引视图。

使用剃刀2视图的ASP.Net MVC 4。

您可以使用ViewBag.ReturnUrl类的ViewBag.ReturnUrl来存储操作序列中的最新ActionName。

例:

public ActionResult ActionA(){
 ViewBag.ReturnUrl = "ActionA";
 return View();
}

public ActionResult ActionB(){
 ViewBag.ReturnUrl = "ActionB";
 return View();
}

public ActionResult Declined(){
 return RedirectToAction(ViewBag.ReturnUrl);
}

您可以尝试缓存或保存以前的URL,然后重定向回它。

    public ActionResult Index()
    {
        var previousPage = System.Web.HttpContext.Current.Request.UrlReferrer;


        //Yourlogic

        RedirectToAction(previousPage);
    }

只需在InboxModel中添加一个属性来说明您的来源。 然后,可以在表单中放置具有该值的“隐藏”。

顺便说一句,您在不传递Status参数的情况下重定向到Index ...我错了吗?

得到它了 !! 抱歉,这不是一个直截了当的问题,因为要感谢您的宝贵时间,因此要添加大量代码来增加混乱。

基本上在操作开始时保存邮件的初始状态。因为这样,状态仅在操作内更改。 在“接受的操作结果”顶部,

 var returnStatus = Mail.Status;

然后在返回中使用该变量。

  return RedirectToAction("Index", new { Status = (int)returnStatus, Message = "Mail Successfully added to Sent Listing" });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM