0

リンクがクリックされたときに、別のページの同じ値に基づいてページを表示する必要がある MVC アプリケーションがあります。渡されるものが文字列ではなく null である理由がわかりません。私のコードは以下です。

コントローラ:

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」の場合、SearchKey が正しいにもかかわらず、文字列の代わりに null が渡されます。ただし、これはすべて他のビューでも機能します。私は何を間違っていますか?

4

3 に答える 3

2

値をコントローラーに戻す場合、基本的に 2 つのオプションがあります。

  1. フォームを作る

  2. URL の一部として渡す

Get メソッドは URL 属性のみを受け入れますが、Post メソッドはフォームのコンテンツも処理できます。

あなたがやろうとしていることから、次のようなものを使用できると思います:

@Html.Action("PartialMain", "Home", new {heatSearch = (string)ViewBag.SearchKey})

これにより、/Home/PartialMain?heatSearch=[SearchKey のコンテンツ] のような URL が作成されます。

編集:

これは、ViewBag に存在する値のみを渡します。セッションから取得していますが、これは MVC のひどいアイデアです (セッションレスである必要があります)。そこで本当に必要かどうかを検討してください。通常、これを実装するには他の方法があります。

于 2013-04-19T07:10:40.153 に答える