Html.Partial不渲染局部视图

4 asp.net-mvc-partialview razor asp.net-mvc-4

我在视图中有以下代码:

@if (SiteSession.SubPageHelper.DisplayType == DisplayType.List)
{
    Html.Partial("_SubLandingPage_List");
}
else
{
    Html.Partial("_SubLandingPage_Grid");
}
Run Code Online (Sandbox Code Playgroud)

在部分内容中我只有一个像这样的foreach循环:

@foreach (Product product in SiteSession.SubPageHelper.PagedProducts)
{
      some html code here
}
Run Code Online (Sandbox Code Playgroud)

PagedProducts从做了.Take()产品缓存列表

现在上面的代码不会显示我的分页产品,但是如果我更改了部分以包含at符号,则删除分号:

@Html.Partial("_SubLandingPage_Grid")
Run Code Online (Sandbox Code Playgroud)

它会正确显示产品.任何人都可以告诉我这两个版本之间的区别是因为我花了很长时间才弄清楚产品没有显示的原因

Ehs*_*jad 14

实际上是razor语法告诉我们开始编写c#代码,如果你不把它放在@它将被视为纯文本,所以你需要在视图和html helper方法中编写c#代码之前放置@符号你不需要在前面加分号然后用这种方式编写助手的剃刀语法.

例如:

@Html.LabelFor(x=>m.SomeProperty) // here @ is telling that we are writing c# statement
Run Code Online (Sandbox Code Playgroud)

当你写:

@if (SiteSession.SubPageHelper.DisplayType == DisplayType.List)
{
    Html.Partial("_SubLandingPage_List"); // this is wrong syntax 
}
else
{
    Html.Partial("_SubLandingPage_Grid");
}
Run Code Online (Sandbox Code Playgroud)

正确的方法是告诉这是一个剃刀html助手和c#语句:

@if (SiteSession.SubPageHelper.DisplayType == DisplayType.List)
{
    @Html.Partial("_SubLandingPage_List")
}
else
{
    @Html.Partial("_SubLandingPage_Grid")
}
Run Code Online (Sandbox Code Playgroud)

你可以在这里看到更多关于剃刀语法的信息

几个链接可以帮助您理解剃须刀:

http://www.asp.net/web-pages/tutorials/basics/2-introduction-to-asp-net-web-programming-using-the-razor-syntax

http://weblogs.asp.net/scottgu/asp-net-mvc-3-razor-s-and-lt-text-gt-syntax

http://weblogs.asp.net/scottgu/introducing-razor

更新:

另一种方法是使用RenderPartial,它可以在if语句中使用,而不需要输入@符号:

@if (SiteSession.SubPageHelper.DisplayType == DisplayType.List)
    {
        Html.RenderPartial("_SubLandingPage_List");
    }
    else
    {
        Html.RenderPartial("_SubLandingPage_Grid");
    }
Run Code Online (Sandbox Code Playgroud)

为了解Html.Partial和之间的区别Html.RenderPartial,请访问这些链接:

Html.Partial vs Html.RenderPartial&Html.Action vs Html.RenderAction

http://dotnethelpers.wordpress.com/2013/06/18/difference-between-html-renderpartial-vs-html-partial-and-html-renderaction-vs-html-action-in-mvc/

http://www.em64t.net/2010/12/razor-html-renderpartial-vs-html-partial-html-renderaction-vs-html-action-what-one-should-use/

  • 但是如果它被认为是纯文本,那么为什么不渲染到屏幕上而不是什么都不渲染。此外,当我调试并逐步执行代码时,它仍然进入部分代码,但产品集合中没有任何内容 (2认同)