【问题标题】:how can I re-direct to different pages using the same controller ActionResult?如何使用相同的控制器 ActionResult 重定向到不同的页面?
【发布时间】:2013-10-16 22:33:38
【问题描述】:

我有两个使用相同 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());
    }

ActionResult 称为“已拒绝”, 问题是 Action Result 包含以下内容...

  [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());
    }

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

请注意,这是我目前重定向到“已接受”以执行不同操作的方式...

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

ASP.Net MVC 4 使用 razor 2 视图.....有什么想法吗?

【问题讨论】:

  • 您是否必须在索引操作中查看?
  • 不确定我理解你的意思,索引充当我的“选定消息”,然后根据消息状态,它们出现在不同的列表中,例如 status = Accepted...我会更新显示视图代码的代码

标签: c# html asp.net-mvc-4


【解决方案1】:

您可以使用 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);
}

【讨论】:

  • 例如,我会将 ViewBag.ReturnUrl = "Accepted" 与我的 Accepted Action 一起放置..?并在索引中做同样的事情..
  • 以下代码有问题....ViewBag.ReturnUrl = "Index" , new{ Status = (int)InboxStatus.Accepted};
  • 该代码无法编译。编辑您的帖子,以便我可以看到它的全部内容
【解决方案2】:

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

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


        //Yourlogic

        RedirectToAction(previousPage);
    }

【讨论】:

    【解决方案3】:

    只需在您的 InboxModel 中添加一个属性来说明您的来源。 然后,在您的表单中,您可以使用该值放置一个 Hidden。

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

    【讨论】:

    • 你的正确,因为索引是邮件详细信息,所以索引状态为 1(已接受邮件),状态 2=(已发送邮件)等
    【解决方案4】:

    知道了!!抱歉,这不是一个直截了当的问题,因为有很多代码会增加混乱,感谢大家的时间..

    基本保存动作开始时邮件的初始状态.. 因为它的状态只在动作中改变。 在 Accepted ActionResult 的顶部,

     var returnStatus = Mail.Status;
    

    然后在返回中使用那个变量......

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

    【讨论】:

      猜你喜欢
      • 2014-06-24
      • 2015-11-03
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      相关资源
      最近更新 更多