2

所以,我已经使用 MVC 3、Razor 1 和 Web.Helpers 1 一年多了,但最近转移到了 MVC 4、Razor 2 和 Web.Helpers 2。我注意到任何发生了一些奇怪的事情在 HTML 属性中具有内联代码或 Web 帮助程序的视图。即,代码呈现在属性之外。

示例 1:(MVC 3,Razor 1,Web.Helpers 1)

<li class="@{ Write(0 == RowCount % 2 ? "even" : "odd"); }">

将呈现为:

<li class="even">

或者

<li class="odd">

示例 2:(MVC 3,Razor 1,Web.Helpers 1)

<img alt="@item.PlanNumber" title="@item.PlanNumber" src="@{Html.RenderAction("GetHomeImage", new { street = (string)item.AddrStreet, photo = (string)item.ELEV1, type = (string)item.RecordType, plan = (string)item.PlanNumber, elevation = (string)item.PlanElevation, defaultImage = (string)item.HomeImage });}" border="0" style="padding:2px 2px 2px 2px;" />

将呈现为:

<img alt="2473W" title="2473W" src="/Content/_gallery/homes/photos/17411WOODFALLSLANE_S.jpg" border="0" style="padding:2px 2px 2px 2px;" />

当我将站点更新为 MVC 4、Razor 2、Web.Helpers 2 时,我看到以下内容

示例 1 呈现为:

<lieven class="">

或者

<liodd class="">

示例 2 呈现为:

<img alt="2473W" title="2473W" /Content/_gallery/homes/photos/17411WOODFALLSLANE_S.jpg src="" border="0" style="padding:2px 2px 2px 2px;" />

我已经能够通过将 HTML.RenderAction 更改为 HTML.Action 来解决这个问题,所以我的代码现在是:(MVC 4,Razor 2,Web.Helpers 2)

示例 1:

string rowClass = (0 == RowCount % 2) ? "even" : "odd";

                    <li class="@rowClass">

示例 2:

<img src="@Html.Action("GetHomeImage", "FindYourHome", new { street = (string)item.AddrStreet, photo = (string)item.ELEV1, type = (string)item.RecordType, plan = (string)item.PlanNumber, elevation = (string)item.PlanElevation, defaultImage = (string)item.HomeImage })" border="0" style="padding:2px 2px 2px 2px;" alt="@item.PlanNumber" title="@item.PlanNumber" />

这两个例子都正确呈现,但我不确定为什么?

我非常感谢任何可用的信息,它们将帮助我在我们的站点中找到任何其他实例,并使我对更新到 MVC 4、Razor 2 和 Web.Helpers 2 感觉更好。

4

2 回答 2

3

现在无法测试,但试试这个:

<li class="@(0 == RowCount % 2 ? "even" : "odd")">

注意括号而不是大括号。

于 2013-01-29T16:01:02.000 回答
1

作为对“为什么”新@(....)语法有效的回应,请注意 MVC4 包括对“条件属性”的支持。

在此处查看更多信息:http ://www.davidhayden.me/blog/conditional-attributes-in-razor-view-engine-and-asp.net-mvc-4

于 2013-01-30T04:41:05.897 回答