【问题标题】:MVC3 Razor View OptimizationMVC3 Razor 视图优化
【发布时间】:2012-03-15 18:32:59
【问题描述】:

@if @else 相比,有没有更好的方法只是在使用 Razor 视图构建的 cshtml 页面中更改 html 元素的一些属性(如禁用、值、类等)?

【问题讨论】:

  • 好吧,我不知道如何避免使用“if/else”。也许简短的 if/else 语法会帮助你 @(true ? "enabled" : "disabled")。您可以通过其他方式在控制器中创建帮助程序或计算属性值

标签: asp.net-mvc-3 razor


【解决方案1】:

您也可以使用内联条件语句:

<input type="text" value="@(true == true ? "one value" : "another value")" />

【讨论】:

    【解决方案2】:

    MVC 4/Razor V2 会有一些改进:

    条件属性渲染

    如果您有一个可能为 null 的属性,过去您需要进行 null 检查以避免写出空属性,如下所示:

    <div @{if (myClass != null) { <text>class="@myClass"</text> } }>Content</div> 
    

    现在 Razor 能够自动处理该问题,因此您只需写出属性即可。如果为null,则不写入属性:

    <div class="@myClass">Content</div> 
    

    所以如果@myClassnull,输出就是这样:

    <div>Content</div>
    

    来自Jon Galloway's blog

    【讨论】:

    • 这将是一个了不起的功能......喜欢它:)
    【解决方案3】:

    您可以在 ViewModel 中将它们作为真/假值或字符串值传递。 例如 -

    • 任何需要动态设置为启用或禁用的东西 - 你可以创建一个布尔值
    • 在运行时设置为字符串的任何 html 类都可以在视图模型中作为字符串变量传递。

    等等

    这将清除所有@if else 语句的剃刀视图

    【讨论】:

    • 嗯听起来很有趣- html.helpers 可能更有趣(我在 google 上看到过;))
    • 我不确定您打算如何为此目的使用 html 助手
    • 喜欢使用 MvcHtmlString StatusClass 根据条件选择一个特定的类..我在 MvcHtmlString 扩展方法中并不方便:(
    【解决方案4】:

    我不知道您为什么认为剃须刀 @if 存在任何性能缺陷,但您可以为此使用您的 ViewModelViewBag

    <input type="text" value="@(ViewBag.TheValue)" />
    

    但为了获得最佳实践,请勿将服务器端逻辑与演示文稿混用。 “关注点分离”


    更新(我所说的“关注点分离”是什么意思):

    这意味着视图应该包含尽可能多的内容,HTML 标记和 HTML 助手(它们只是帮助您编写标记)。不要将逻辑放在视图中。如果它使您将代码放入其中,请不要重用相同的视图。

    【讨论】:

    • 我想整理代码..我需要使用多个嵌套的 if else 语句,这也会在元素的“ID”中产生冲突..
    • @user1270199。显示一些真实代码。看来您使用剃须刀的方式有误!
    • 当您说“不要将服务器端逻辑与演示文稿混合”时,是否意味着对所有动态属性使用 Viewbag.Value?
    • @user1270199。不,这意味着视图应该包含尽可能多的内容,HTML 标记和 HTML 助手(它们只是帮助您编写标记)。不要将逻辑放在视图中。如果它使您将代码放入视图中,请不要重用相同的视图。
    • 哦,知道了。在您的示例中,如果“值”属性也需要有条件,那么有什么方法可以做到吗??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    相关资源
    最近更新 更多