Razor正在和我玩耍。我有一个部分观点:
@model ManageMvc.Models.Default.Classes.MvcModule
@{
if (Model.CanExpand)
{
Response.Write("Crazy");
@:TEST
<text>ojiiojjiojiojiojiojiojiojio</text>
Response.Write("Crazy2");
}
else
{
Response.Write("Crazy");
@:TEST
<text>ssssssssdffffffff</text>
Response.Write("Crazy2");
}
}
这是从这个调用的:
@if (Model.Modules.Count > 0)
{
for (var i = 0; i < Model.Modules.Count; i++)
{
Html.Partial("~/Views/UserControls/_MenuItem.cshtml", Model.Modules[i]);
}
....
}
我希望razor打印出Text块和@:块中写的内容。但我一无所获。当我运行它时,它只打印CrazyCrazy2(对于列表中的每个模块)。 我错过了什么吗?
更新
调用if(Model.Modules.Count&gt; 0)的代码本身就是部分代码。那个是从布局页面调用的。所以顶部代码是被调用的第二个部分。这会有什么不同吗?
布局 - &gt; MainMenu(部分) - &gt; CreateMenuItem(部分)
更新
这是新代码:(_MenuItem.cshtml在Shared-&gt; DisplayTemplates中)
@model ManageMvc.Models.Default.Classes.MvcModule
@{
if (Model.CanExpand)
{
@:TEST
<text>ojiiojjiojiojiojiojiojiojio</text>
}
else
{
@:TEST
<text>ssssssssdffffffff</text>
}
}
正在调用菜单项的部分视图MainMenu:
@Html.DisplayFor(x => x.Modules, "_MenuItem")
现在这打破了该行,我收到以下错误:
传递到字典中的模型项的类型为'System.Collections.Generic.List`1 [ManageMvc.Models.Default.Classes.MvcModule]',但此字典需要类型为'ManageMvc.Models的模型项。 Default.Classes.MvcModule”。
答案 0 :(得分:0)
在调用@
帮助程序时放置Html.Partial
并避免在ASP.NET MVC视图中使用Response.Write
:
for (var i = 0; i < Model.Modules.Count; i++)
{
@Html.Partial("~/Views/UserControls/_MenuItem.cshtml", Model.Modules[i]);
}
除了写一些丑陋的循环外,我强烈建议你使用模板化助手。因此,使用这个简单的帮助器替换布局中的for循环:
@Html.DisplayFor(x => x.Modules)
然后定义将为~/Views/Shared/DisplayTemplates/MvcModule.cshtml
集合的每个元素呈现的显示模板(Modules
):
@model ManageMvc.Models.Default.Classes.MvcModule
@if (Model.CanExpand)
{
@:TEST
<text>ojiiojjiojiojiojiojiojiojio</text>
}
else
{
@:TEST
<text>ssssssssdffffffff</text>
}
看看这有多容易?