代码中的Razor + jQuery组合

时间:2014-05-05 19:43:30

标签: jquery asp.net-mvc

我找到了一些Razor Syntax和jQuery组合的例子。例如:

Jquery syntax in .cshtml file Razor View Engine and jQuery

我该怎么做?我设置了一个名为" MaxHeight"在tr上,但只有当用户点击+按钮并且在用户组上时,才能启用用户单击复选框。

所以我的jQuery-tinkerings看起来像这样:

    function SizeButtonClicked(obj) {
        var closestTr = $(obj).closest('tr');

        if (closestTr.hasClass('maxHeight')) {
            closestTr.removeClass('maxHeight');

            @if(Roles.IsUserInRole(UserRole.Customer.ToString()) || User.IsInRole(UserRole.Admin.ToString()))
            {
                <text>
                    <script type="text/javascript">
                        closestTr.find('input[type=checkbox]').removeAttr('disabled');
                    </script>
                </text>
            }
         }
         else {
                closestTr.addClass('maxHeight');
                closestTr.find('input[type=checkbox]').attr('disabled', 'disabled');
            }
        }

因此,如果用户位于角色客户或管理员中,我想删除禁用的attr,并且可以单击CHK。

但我想这不会在1000年内奏效。甚至可以组合这样的东西吗?对于这样的想法会有更简单的解决方案吗?

伊迪丝:我尝试使用Warrior和Sergey所说的内容,所以我创建了一个自己的JS-File并传递一个参数来检查是否应该搜索disabled属性:

<input type="button" value="+" class="SizeButton" onclick="SizeButtonClicked(this, @(Roles.IsUserInRole(UserRole.Customer.ToString()) || User.IsInRole(UserRole.Admin.ToString())))" />

到目前为止不起作用,但是这样的东西是正确编程的解决方案吗?

2 个答案:

答案 0 :(得分:2)

这实际上工作得很好,但你不需要脚本标记:

@if(Roles.IsUserInRole(UserRole.Customer.ToString()) || User.IsInRole(UserRole.Admin.ToString()))
{
    <text>
        closestTr.find('input[type=checkbox]').removeAttr('disabled');
    </text>
}

如果删除脚本标记,它将呈现如下所示:它们的角色为:

function SizeButtonClicked(obj) {
    var closestTr = $(obj).closest('tr');

    if (closestTr.hasClass('maxHeight')) {
        closestTr.removeClass('maxHeight');

        closestTr.find('input[type=checkbox]').removeAttr('disabled');
     }
     else {
        closestTr.addClass('maxHeight');
        closestTr.find('input[type=checkbox]').attr('disabled', 'disabled');
     }
}

答案 1 :(得分:0)

Erik是对的,因为你的问题是在<script>标签中加入了你不需要的标签。值得注意的是,@:运算符可以消除对<text>标记的需求:

@if(Roles.IsUserInRole(UserRole.Customer.ToString()) || User.IsInRole(UserRole.Admin.ToString()))
{
    @:closestTr.find('input[type=checkbox]').removeAttr('disabled');
}

但我会回应Sergey Akopov的评论,你真的应该努力从你的视图代码中完全删除javascript。 JQuery特别擅长扫描你的DOM元素并从中提取信息,所以如果你使用所谓的不引人注目的javascript 技术,你应该能够在你的元素上放置数据属性来指示是否会发生这种情况,并将您的javascript移动到自己的静态文件中。