如何将View()返回到另一个操作而不丢失@Html.DropDownListFor()的数据

本文关键字:@Html 数据 DropDownListFor 另一个 View 返回 操作 | 更新日期: 2023-09-27 17:53:33

在视图中,我设计了一个@Html.DropDownListFor()并将源代码放在public ActionResult Index(){...}中。运行正常。

现在,我想通过另一个动作引用Index()。像这样:

public ActionResult AnotherAction()
{
   // do something...
   return View("index");
}

当我运行AnotherAction()时,DropDownListFor()的所有数据将丢失。

我的意思是:当我渲染到Index.cshtml(在return View("index");行)时,Index()中的代码将不会执行。因此,数据源将丢失。

但是,如果我把那行改成return RedirectToAction("index", "default");。没关系。

这是我的问题:在行动AnotherAction(),我想存储一些值到ViewBag和显示在视图中。但是当我重定向时,ViewBag的所有值都会丢失。

我想使用return View("index"),而不是重新重定向。

和我的问题是:如何保持下拉列表的数据(在行动Index())和ViewBag的值(在行动AnotherAction())?

如何将View()返回到另一个操作而不丢失@Html.DropDownListFor()的数据

将构建DDL的代码分开,并从两个操作中调用它。

public ActionResult Index()
{
    //do index action related stuff
   BuildDataForDDL();
   return View("index");
}
public ActionResult AnotherAction(YourModel yourModel)
{
    //do another action related stuff
   BuildDataForDDL();
   ViewBag.Add(SelectedValue, yourModel.DropDownSelectedValue);
   return View("index");
}
private void BuildDataForDDL()
{
   // build ddl
   //ViewBag.Add(etc,etc);
}

当我运行AnotherAction()时,DropDownListFor()的所有数据将丢失。

但是当我重定向时,ViewBag的所有值都会丢失。

不要将其视为重定向,也不要将其视为数据丢失。

对YourController/AnotherAction的请求是路由引擎发送给那个动作的另一个请求,这是对Index调用的一个完全独立的请求,它不会在那些请求之间共享ViewBag的状态。

因为它是一个新的请求,ViewBag是空的,所以你需要运行所有的代码,你需要构建你想要的任何结果,你返回;在本例中,构建DDL数据并将其放入ViewBag。