ASP.net MVC 5 从主控制器调用布局中的部分视图
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>
启动页面时,chosenAMT 的值为 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);
}
});
这是 showNav 中的代码 HomeController.cs:
[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");
}
您需要动态重新加载该部分菜单。首先,创建一个操作方法,其中 returns 菜单标记。
public ActionResult Menu()
{
return PartialView("Menu");
}
您还可以将 if
条件语句移动到分部视图中以有条件地呈现某些标记。所以你的 Menu.cshtml
会像
<ul class="nav navbar-nav">
@if (Session["chosenAMT"] is bool == true)
{
@Html.Partial("_Menu")
}
</ul>
现在在外部容器元素中调用此操作方法。
<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);
},
嘿,我正在尝试找到一种方法(或者如果可能的话)调用此代码:
<nav>
<ul class="nav navbar-nav">
@if (Session["chosenAMT"] is bool == true)
{
@Html.Partial("_Menu")
}
</ul>
</nav>
启动页面时,chosenAMT 的值为 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);
}
});
这是 showNav 中的代码 HomeController.cs:
[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");
}
您需要动态重新加载该部分菜单。首先,创建一个操作方法,其中 returns 菜单标记。
public ActionResult Menu()
{
return PartialView("Menu");
}
您还可以将 if
条件语句移动到分部视图中以有条件地呈现某些标记。所以你的 Menu.cshtml
会像
<ul class="nav navbar-nav">
@if (Session["chosenAMT"] is bool == true)
{
@Html.Partial("_Menu")
}
</ul>
现在在外部容器元素中调用此操作方法。
<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);
},