我找到了一些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())))" />
到目前为止不起作用,但是这样的东西是正确编程的解决方案吗?
答案 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移动到自己的静态文件中。