[英]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.