MVC内联代码无法在html标记中呈现

时间:2013-01-29 15:42:37

标签: c# asp.net-mvc-3 razor asp.net-mvc-4

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

示例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感觉好多了。

2 个答案:

答案 0 :(得分:3)

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

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

注意括号而不是括号。

答案 1 :(得分:1)

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

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