标签:razor partial-views asp-net c asp-net-mvc
我有一些简单的< header>文件Shared / _Header.cshtml中的内容.
我的Shared / _Layout.cshtml通过调用插入该代码
@Html.Partial("_Header")
到目前为止,这工作正常.
现在,我有一些观点,除了通过@RenderBody()进行常规输出之外,还应该在标题的特定位置添加一些图标.
我在几个视图中使用@RenderSection()来创建侧边栏等.
现在,我的想法是在视图中创建一个部分(例如Home / Details.cshtml),然后向_Header添加RenderSection调用.布局将调用Header,而header将依次查看该节是否存在并调用它.
但是,这似乎不起作用.我收到以下错误/异常:
The file "~/Views/Shared/_Header.cshtml" cannot be requested directly because it calls the "RenderSection" method.
我的错误在哪里?我知道我可以在部分内“嵌套”部分调用.此代码可以很好地告诉布局用于边栏的文件:
@section Sidebar{
@Html.Partial("_SidebarDetails")
}
反过来行不通吗?
我需要一种在视图内部定义HTML块的方法,然后将其放入布局所调用的部分内部的预定义位置.
请帮助我了解如何执行此操作.
解决方法:
如果视图包含RenderSection,则将其视为布局页面,并且无法直接呈现.有关更多信息,请参见此问题:The file “~/Views/Position/Edit.cshtml” cannot be requested directly because it calls the “RenderSection” method
最简单的解决方案是将部分视图合并到布局中,特别是如果_Header.cshtml仅包含在布局页面中时.
另一种选择是在需要时使用自定义标头覆盖标头视图.
在布局页面中:
@if (IsSectionDefined("Header"))
{
RenderSection("Header");
}
else
{
@Html.Partial("_Header");
}
在您的视图中(带有自定义图标):
@section Header
{
@Html.Partial("_CustomHeader")
}
进一步的解决方案是从包含自定义图标数据(例如
public abstract class BaseModel
{
public List<Icon> Icons { get; set; }
}
public class ModelWithIcons : BaseModel
{
public ModelWithIcons()
{
// Set up icon data
}
}
_header部分视图(仍在布局页面中定义)将使用此基本模型,并进行空检查,呈现其找到的任何图标:
@model BaseModel
<!-- Header HTML -->
@if (Model != null && Model.Icon)
{
// Render icons
}
<!-- More HTML -->
显而易见的缺点是,所有模型都必须派生自BaseModel类,否则部分视图将引发错误.
标签:razor,partial-views,asp-net,c,asp-net-mvc 来源: https://codeday.me/bug/20191122/2056354.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。