值没有正确地从视图传递给控制器

本文关键字:控制器 视图 正确地 | 更新日期: 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是正确的。但这一切都适用于另一种观点。我做错了什么?

值没有正确地从视图传递给控制器

当将值传递回控制器时,您基本上有两个选项:

  1. 创建表单

  2. 作为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