如何将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()
)?
将构建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。