值没有正确地从视图传递给控制器
本文关键字:控制器 视图 正确地 | 更新日期: 2023-09-27 18:10:01
我有一个MVC应用程序,当一个链接被点击一个页面需要显示基于相同的值在另一个页面。我不明白为什么传递的是空而不是字符串。我的代码如下:
控制器:
public string searchQ
{
get { return (string)Session["searchQ"]; }
set { Session["searchQ"] = value; }
}
public ActionResult Index()
{
Session["InitialLoad"] = "Yes";
return View();
}
[HttpPost]
public ActionResult Index(string heatSearch)
{
ViewBag.SearchKey = heatSearch;
searchQ = heatSearch;
return View();
}
public ActionResult Index_Perm()
{
ViewBag.SearchKey = searchQ;
return View();
}
public ActionResult PartialMainLim(string heatSearch)
{
HomeModel C = new HomeModel();
ChemViewModel D = new ChemViewModel();
D = C.QueryResults(heatSearch);
return PartialView(D);
}
public ActionResult PartialMain(string heatSearch)
{
HomeModel C = new HomeModel();
ChemViewModel D = new ChemViewModel();
D = C.QueryResults(heatSearch);
return PartialView(D);
}
索引视图中的代码看起来像这样(这个有效):
@if (ViewBag.SearchKey != null)
{
<div>
@Html.Action("PartialMainLim", "Home", (string)ViewBag.SearchKey)
</div>
}
在index_perm视图中:
@if(ViewBag.SearchKey != null)
{
<div>
@Html.Action("PartialMain", "Home", (string)ViewBag.SearchKey)
</div>
}
当我检查两个视图中的SearchKey值时,它是正确的。然而,对于方法"PartialMain"传递null而不是字符串,尽管SearchKey是正确的。但这一切都适用于另一种观点。我做错了什么?
当将值传递回控制器时,您基本上有两个选项:
-
创建表单
-
作为url的一部分传递
Get方法只接受url属性,而Post方法也可以处理表单内容。
从你想做的事情来看,我建议你可以这样做:
@Html.Action("PartialMain", "Home", new {heatSearch = (string)ViewBag.SearchKey})
这应该创建url看起来像/Home/PartialMain?heatSearch=[content of SearchKey]
编辑:将只传递给定的值在ViewBag中。你从会话中得到它,这在MVC中是一个可怕的想法(它应该是无会话的)。请考虑一下你是否真的需要它。通常还有其他方法来实现这个
当您单击index_perm视图时,控制器中没有HttpPost处理程序
我认为问题是你的会话将是空的。框架ASP的原则之一。. NET MVC是无状态的。在ASP中使用会话。. NET MVC相当可怕。
目前,我认为你可以通过使用TempData来快速修复它,默认使用Session。您可以查看一篇过时的文章,以进一步挖掘ViewData与TempData