簡體   English   中英

ASP.net MVC 5從Home控制器調用布局中的局部視圖

[英]ASP.net MVC 5 calling partial view thats in layout from Home controller

嘿,我正在嘗試尋找一種方法(或者如果可能的話)來調用此代碼:

<nav>
    <ul class="nav navbar-nav">
        @if (Session["chosenAMT"] is bool == true)
        {
           @Html.Partial("_Menu")
        }
    </ul>
</nav>

當它啟動頁面時, selectedAMT的值為false,因此導航不會加載到_Layout.cshtml頁面上。

但是,一旦用戶從下拉菜單中選擇一個值,我就需要啟用該局部視圖,以便它可以向用戶顯示導航。

當用戶從下拉列表中選擇一個值時,我將POST調用到HomeController.cs

$.ajax({
  type: 'POST',
  url: 'Home/showNav',
  cache: false,
  dataType: 'json',
  data: {},
  success: function (response) {
     console.log('worked');
  },
  error: function (response) {
     console.log(response);
  }
});

這是HomeController.cs中showNav代碼:

[HttpPost]
public string showNav()
{
   Dictionary<string, string> resultsBack = new Dictionary<string, string>();

   Session["chosenAMT"] = true;

   resultsBack.Add("dback", "GOOD");
   resultsBack.Add("dhead", "worked");
   resultsBack.Add("dinfo", "called nav");

   return JsonConvert.SerializeObject(allData, Formatting.Indented);
}

關於如何繼續調用_Layout.cshtml頁面以立即顯示導航, 我非常 困惑

任何幫助將是巨大的! 謝謝!

更新

得到它了!

_Layout.cshtml:

 <nav id="menuContainer" data-url="@Url.Action("Menu","Home")">                    
    @Html.Action("Menu")
 </nav>

_Menu.cshtml:

 @if (Session["chosenAMT"].ToString() == "True")
 {
    <ul class="nav navbar-nav">
    etc...etc....
    </ul>
 }

index.js:

 success: function (response) {
    var url = $("#menuContainer").data("url");

    $("#menuContainer").load(url);
 },

家庭控制器:

 public ActionResult Menu()
 {
    return PartialView("_Menu");
 }

您需要動態重新加載菜單的該部分。 首先,創建一個操作方法,該方法返回菜單的標記。

public ActionResult Menu()
{
   return PartialView("Menu");
}

您也可以在局部視圖內移動if條件語句,以有條件地呈現一些標記。 所以你的Menu.cshtml就像

    <ul class="nav navbar-nav">
        @if (Session["chosenAMT"] is bool == true)
        {
           @Html.Partial("_Menu")
        }
    </ul>

現在,在外部容器元素內部調用此action方法。

<nav id="menuContainer" data-url="@Url.Action("Menu","YourControllerName")">
   @Html.Action("Menu")
</nav>

現在,您要做的就是在ajax調用成功時重新加載此菜單容器div的內容。 您可以使用jQuery load方法

success: function (response) {
     var url = $("#menuContainer").data("url");
     $("#menuContainer").load(url);
},

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM