C# MVC内联代码未在html标记中呈现
所以,我已经使用MVC 3、Razor 1和Web.Helpers 1一年多了,但最近我又转向了MVC 4、Razor 2和Web.Helpers 2。我注意到任何在HTML属性中包含内联代码或web助手的视图都会发生一些奇怪的事情。即,代码在属性外部呈现 示例1:(MVC3、Razor 1、Web.Helpers 1)C# MVC内联代码未在html标记中呈现,c#,asp.net-mvc-3,razor,asp.net-mvc-4,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助手的视图都会发生一些奇怪的事情。即,代码在属性外部呈现 示例1:(MVC3、Razor 1、Web.Helpers 1) 将呈现为: <li class="even"> 或 示例2:(MVC3、Razor 1、Web.Helpers 1) 将呈现为: <img
将呈现为:
<li class="even">
或
示例2:(MVC3、Razor 1、Web.Helpers 1)
将呈现为:
<img alt="2473W" title="2473W" src="/Content/_gallery/homes/photos/17411WOODFALLSLANE_S.jpg" border="0" style="padding:2px 2px 2px 2px;" />
当我将站点更新为MVC4、Razor2、Web.Helpers 2时,我看到了以下内容
示例1呈现为:
<lieven class="">
<img alt="2473W" title="2473W" /Content/_gallery/homes/photos/17411WOODFALLSLANE_S.jpg src="" border="0" style="padding:2px 2px 2px 2px;" />
或
示例2呈现为:
<lieven class="">
<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来解决这个问题,所以我的代码现在是:(MVC4、Razor2、Web.Helpers 2)
例1:
string rowClass = (0 == RowCount % 2) ? "even" : "odd";
<li class="@rowClass">
string rowClass=(0==行计数%2)?“偶数”:“奇数”;
例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。现在无法测试它,但请尝试以下方法:
<li class="@(0 == RowCount % 2 ? "even" : "odd")">
请注意括号而不是大括号。现在无法测试它,但请尝试以下操作:
<li class="@(0 == RowCount % 2 ? "even" : "odd")">
请注意括号而不是大括号。在回答新的@(…)
语法的“为什么”时,请注意MVC4包括对“条件属性”的支持
请参阅此处的更多信息:在回答新的@(…)
语法的“为什么”时,请注意MVC4包括对“条件属性”的支持
查看此处的更多信息:您是否尝试过使用
?只是一个注释:MVC原则是远离内联的程序性BS。我建议重新考虑你的代码,让它更面向对象。此外,你可以在CSS中做偶数/奇数的事情。你不必硬编码,不幸的是,我们25%的用户使用IE8或更少,所以我们还不能利用第n个孩子。我同意内联代码违背了MVC的本意,但这在我们的网站上是不会发生的:),主要是出于遗留目的。使用class=“@{0==RowCount%2?…}的第一个建议返回一个错误代码:“不能用作语句”您是否尝试过只使用
?请注意:MVC的原则是远离内联的、过程性的BS。我建议重新考虑你的代码,让它更面向对象。此外,你可以在CSS中做偶数/奇数的事情。你不必硬编码,不幸的是,我们25%的用户使用IE8或更少,所以我们还不能利用第n个孩子。我同意内联代码违背了MVC的本意,但这在我们的网站上是不会发生的:),主要是出于遗留目的。使用class=“@{0==RowCount%2?…}的第一个建议返回一个错误代码:“不能用作语句“好吧……这奏效了!但是为什么呢?我不喜欢这个答案…因为我不想在我的站点中找到属性标记中的所有@{}代码并将它们更改为@()。MVC的引用有什么变化吗?注意:这对示例1有效,但对示例2无效。我同意将HTML.RenderAction更改为HTML.Action,因为我相信它在流中的渲染效果更好,我已经做了更改。我只想找出原因,HTML.RenderAction的行为有所不同。例如,我只想使用@HTML.RenderAction(…),而不是将其包含在代码块中。使用@HTML.RenderAction(…)会返回错误“无法隐式将类型“void”返回到“object”没有将其包含在代码块中。在Html.RenderAction和Html.Action之间混淆了,RenderAction将结果直接显示到响应中,而Html.Action返回字符串。好的……这很有效!但是为什么呢?我不喜欢这个答案…因为我不想在我的站点中找到属性标记中的所有@{}代码并将它们更改为@()。MVC的引用有什么变化吗?注意:这对示例1有效,但对示例2无效。我同意将HTML.RenderAction更改为HTML.Action,因为我相信它在流中的渲染效果更好,我已经做了更改。我只想找出原因,HTML.RenderAction的行为有所不同。例如,我只想使用@HTML.RenderAction(…),而不是将其包含在代码块中。使用@HTML.RenderAction(…)会返回错误“无法隐式将类型“void”返回到“object”没有将其包含在代码块中。在Html.RenderAction和Html.Action之间混淆,RenderAction将结果直接显示到响应中,而Html.Action返回字符串。因此,主要问题似乎是MVC4中的新条件属性功能返回布尔值或其他非字符串类型的数据,这可能会对您的页面造成不利影响。页面似乎在处理HTML.RenderAction返回的字符串和操作本身的void类型时都存在问题?看起来有点像vodoo魔术,但幸运的是,我在整个网站上只有几十个需要更改的条件属性。因此,主要问题是MVC4中新的条件属性功能返回布尔值或其他非字符串类型的数据,这可能会对页面造成不利影响。页面似乎在处理HTML.RenderAction返回的字符串和操作本身的void类型时都存在问题?看起来有点像伏都教的魔法,但幸运的是
<li class="@(0 == RowCount % 2 ? "even" : "odd")">