繁体   English   中英

在MVC中如何动态返回

[英]In MVC how to go back dynamically

在我正在创建的Help Desk系统中-我有一个用于编辑票证的视图,该视图可以正常运行。 但是,此人保存所做的编辑并返回到上一个列表视图之后(可以是8个不同视图中的任何一个)。 因此,我发现代码可以回到上一个视图:

<a href="javascript:void(0);" onclick="history.go(-1);">Back to Ticket List View</a>

从列表的意义上讲,它确实起作用。 不幸的是,尽管返回时所做的任何更改都不会反映在列表视图中。 我点击刷新后,一切都是正确的。 我如何做到这一点,以便用户无需点击“刷新”?

这是我的EditUserTicket控制器代码:

public ActionResult EditUserTicket(Guid id)
        {

            var model = db.Tickets
                    .Include(t => t.TicketNotes)
                    .Where(t => t.TicketId == id).First();

            return View(model);
        }

您可以以ViewModel的形式将返回URL(即故障单列表视图的URL)传递给“编辑故障单视图”。 您的EditTicketViewModel应该类似于:

public class EditTicketViewModel
{
  public String ReturnUrl {get;set;}
  public Guid TicketId {get;set;}
}

以及TicketController的Edit方法:

[HttpGet]
public ActionResult EditUserTicket(EditTicketViewModel model)
{
   var model = db.Tickets
              .Include(t => t.TicketNotes)
              .Where(t => t.TicketId == model.TicketId).First();
   return View(model);
}

为了将返回URL传递给上述控制器,您需要将视图模型嵌入提供可导航到EditUserTicketView的页面的超链接中。 使用此HTML帮助器替换您的超链接:

@Html.ActionLink("hyperlinkText", "EditUserTicket", "yourTicketControllerName", 
              new EditTicketViewModel 
              {TicketId = yourTicketGuid, ReturnURL = Request.RawUrl}, null);

这仅部分解决了问题,EditUserTicketView现在包含发送GET请求时的返回URL,但是当用户执行POST请求以保存数据时,返回URL将丢失。 我不知道您是使用AJAX方法来保存数据还是常规的同步POST请求。 如果使用常规方法,则在发布时需要在表单中传递返回URL,以便在重定向回EditUserTicketView时可以使用它。

您的EditUserTicketView.cshtml的返回超链接应类似于:

<a href="@Model.ReturnUrl">Back to Ticket List View</a>

希望对您有所帮助。

暂无
暂无

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

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