我在视图中有以下代码:
@if (SiteSession.SubPageHelper.DisplayType == DisplayType.List)
{
Html.Partial("_SubLandingPage_List");
}
else
{
Html.Partial("_SubLandingPage_Grid");
}
在部分内部我只有这样的foreach循环:
@foreach (Product product in SiteSession.SubPageHelper.PagedProducts)
{
some html code here
}
在缓存的产品列表中执行PagedProducts
获得.Take()
现在上面的代码并没有显示我的分页产品,但如果我更改了部分以包含at符号,请删除分号:
@Html.Partial("_SubLandingPage_Grid")
它会正确显示产品。任何人都可以告诉我两个版本之间有什么区别,因为我花了很长时间才弄清楚为什么产品没有展示
答案 0 :(得分:13)
实际上是razor语法告诉我们我们开始编写c#代码,如果你不把 @ 它被认为是纯文本,那么你需要把 @ < / strong>在视图中编写c#代码之前签名,在html帮助方法中你不需要在前面加分号,然后以这种方式编写助手的剃刀语法。
例如:
@Html.LabelFor(x=>m.SomeProperty) // here @ is telling that we are writing c# statement
当你写:
@if (SiteSession.SubPageHelper.DisplayType == DisplayType.List)
{
Html.Partial("_SubLandingPage_List"); // this is wrong syntax
}
else
{
Html.Partial("_SubLandingPage_Grid");
}
正确的方法是告诉这是一个剃刀html助手和c#语句:
@if (SiteSession.SubPageHelper.DisplayType == DisplayType.List)
{
@Html.Partial("_SubLandingPage_List")
}
else
{
@Html.Partial("_SubLandingPage_Grid")
}
您可以在剃刀语法HERE
上看到更多信息更多的链接可以帮助您理解剃刀:
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");
}
要了解Html.Partial
和Html.RenderPartial
之间的区别,请访问以下链接:
Html.Partial vs Html.RenderPartial & Html.Action vs Html.RenderAction
答案 1 :(得分:1)
简单地说,“@”符号指示Razor必须渲染一些东西。 @总是希望从提供的语句中打印一些内容。 如果您不想使用此语法,您仍然可以在循环中对代码进行微小更改来呈现内容。请查看此内容。
@if (SiteSession.SubPageHelper.DisplayType == DisplayType.List)
{
Html.RenderPartial("_SubLandingPage_List"); // this is wrong syntax
}
else
{
Html.RenderPartial("_SubLandingPage_Grid");
}
Html.RenderPartial
将直接将其写入流并且不需要@。
即使你试着写下面的内容
@Html.RenderPartial("_SubLandingPage_Grid")
这会给你一个错误,因为@期待某些东西返回,而Html.RenderPartial
会返回void