Asp.Net MVC 助手:创建一个全局助手,用于加载有或没有布局的视图
Asp.Net MVC Helper: create a global helper for loading view with or without layout
我想创建一个应用程序,其中如果有 Ajax 调用它 return 部分视图,如果它是页面刷新它 return 使用布局和呈现脚本。但问题是部分视图不会呈现部分,因为我在 APP_Code 中创建了一个 MVC 助手:
@helper AddSection(Func<object, object> content)
{
if (IsAjaxRequest)
{
@content(null);
}
else
{
@section scripts {
@content(null);
}
}
}
当我在我的视图中调用它时,出现以下错误:
CS0103: The name 'DefineSection' does not exist in the current context
Line 71: #line hidden
Line 72: DefineSection("scripts", () => {
Line 73:
我试了很多方法还是报错,我也找了很多也没找到解决方法
您可以检查请求 header(如本 question 中所述)。检查 X-Requested-With
,如果它显示 XMLHttpRequest
它应该是一个 XHR (Ajax) 请求。
在您的控制器中,您可以使用相同的方法 return PartialView
。
public ActionResult YourAction()
{
Boolean IsAjax = false; //check the request header
if (IsAjax)
{
ViewBag.UseLayout = false;
return PartialView("PartialView");
}
else
{
return View("View");
}
}
在您的视图中,您可以阅读 ViewBag.UseLayout
并决定是否渲染包含所有部分的完整布局:
@{
if (ViewBag.UseLayout == null || ViewBag.UseLayout) {
Layout = "~/Views/Shared/_Layout.cshtml";
}
else {
Layout = null;
}
}
您可以将其扩展到 ViewStart.cshtml
,对 ViewBag 进行空检查,以便将其应用于所有视图。
我查了很多,发现helper里面的section是不行的。下面是 link:
@helper 和@section 语法是编译页面的特殊指令。
一个 HelperResult(一个助手)不知道如何定义一个部分。
DefineSection 方法属于 WebPageBase。
您可能需要从不同的方向来解决这个问题。使用局部视图而不是助手可能会解决这个问题。
你可以使用嵌套布局..内部布局只是为了渲染正文和脚本。
我想创建一个应用程序,其中如果有 Ajax 调用它 return 部分视图,如果它是页面刷新它 return 使用布局和呈现脚本。但问题是部分视图不会呈现部分,因为我在 APP_Code 中创建了一个 MVC 助手:
@helper AddSection(Func<object, object> content)
{
if (IsAjaxRequest)
{
@content(null);
}
else
{
@section scripts {
@content(null);
}
}
}
当我在我的视图中调用它时,出现以下错误:
CS0103: The name 'DefineSection' does not exist in the current context
Line 71: #line hidden
Line 72: DefineSection("scripts", () => {
Line 73:
我试了很多方法还是报错,我也找了很多也没找到解决方法
您可以检查请求 header(如本 question 中所述)。检查 X-Requested-With
,如果它显示 XMLHttpRequest
它应该是一个 XHR (Ajax) 请求。
在您的控制器中,您可以使用相同的方法 return PartialView
。
public ActionResult YourAction()
{
Boolean IsAjax = false; //check the request header
if (IsAjax)
{
ViewBag.UseLayout = false;
return PartialView("PartialView");
}
else
{
return View("View");
}
}
在您的视图中,您可以阅读 ViewBag.UseLayout
并决定是否渲染包含所有部分的完整布局:
@{
if (ViewBag.UseLayout == null || ViewBag.UseLayout) {
Layout = "~/Views/Shared/_Layout.cshtml";
}
else {
Layout = null;
}
}
您可以将其扩展到 ViewStart.cshtml
,对 ViewBag 进行空检查,以便将其应用于所有视图。
我查了很多,发现helper里面的section是不行的。下面是 link:
@helper 和@section 语法是编译页面的特殊指令。
一个 HelperResult(一个助手)不知道如何定义一个部分。
DefineSection 方法属于 WebPageBase。
您可能需要从不同的方向来解决这个问题。使用局部视图而不是助手可能会解决这个问题。
你可以使用嵌套布局..内部布局只是为了渲染正文和脚本。