使用Razor设置javascript变量

本文关键字:变量 javascript 设置 Razor 使用 | 更新日期: 2023-09-27 18:18:07

抱歉,如果这是c#开发人员的基础。我有几个<accordion>在一个侧边栏,每个有data-ng-click="isOpen = !isOpen"展开或折叠手风琴。问题是每一个都调用不同的控制器。是否有一种方法可以全局设置isOpen变量,以确保所有的手风琴在默认情况下展开,并可以单击展开/折叠?

阅读:传递Javascript到Razor $rootscope手风琴扩展所有和许多其他

这是.....部分的一个示例代码还有更多不同的控制器:

    <accordion>
        <div class="zone zone-aside-right">

                <div data-ng-controller="SelectUserController" id="account-group-widget">
                    <accordion-group class="sp-sidebar-module">
                        <div>
                            <accordion-heading>
                                <h3 class="h4 sp-sidebar-module-header">
                                    <a id="headerRelatedContacts" href="javascript: void(0);" data-ng-click="isOpen = !isOpen"><i id="iconRelatedContacts" class="icon-refresh icon-spin"></i>@mycontact.text</a>
                                </h3>
                            </accordion-heading>
                        </div>
                    </accordion-group>
                </div>
</accordion>

欣赏建议…

使用Razor设置javascript变量

假设您有isOpen的值存储为ViewModel中的bool,您可以使用razor @语法来发出此值作为文本,例如在<script>块内。

在将c#布尔值转换为JS布尔值时,有一些注意事项,因此我们使用以下扩展方法来处理:

/// <summary>
/// Convert bool value to javascript boolean (as string because it is placed in javascript)
/// </summary>
public static System.Web.IHtmlString ToJSBoolean(this bool value) {
    return new MvcHtmlString(value.ToString().ToLower());
}

在razor视图中的使用:

<script type="text/javascript">
    var isOpen = @Model.IsOpen.ToJsBoolean();
</script>