Jac*_*ack 0 c# asp.net-mvc razor asp.net-mvc-4 asp.net-identity
我有一个MVC5项目,根据用户的角色显示/隐藏了一些菜单.另一方面,我通过HTML字符串使用DataGrid和一些图标进行Details,Update和Delete操作,并且需要在此HTML字符串中实现User.IsInRole().我怎样才能做到这一点?
查看(剃刀):
<script>
var table;
$(document).ready(function () {
table = $('#dtbStudent')
.DataTable({
//code omitted for brevity
"columnDefs": [
{
"targets": 6,
"data": "download_link",
"render": function (data, type, full, meta) {
return '<a title="Details" id="lnkStudentDetails"></a>' +
'<a title="Edit" id="lnkStudentEdit" ></a>' +
'<a title="Delete" id="lnkStudentDelete" ></i></a>';
}
}
]
});
});
//EventListener ################################################
$(document).on('click', '#lnkStudentDetails', function () {
//!!! It is also possible for me to check the roles at here
and return false & tooltip message
//opens Details modal
});
$(document).on('click', '#lnkStudentEdit', function () {
//opens Edit modal
});
$(document).on('click', '#lnkStudentDelete', function () {
//opens Delete modal
});
//###############################################################
</script>
Run Code Online (Sandbox Code Playgroud)
好像你正在javascript函数中构建一个HTML字符串,其中你正在使用Razor语法.在这种情况下,我建议你这样做.
最初将字符串设置为C#变量.
@{
string additionalString = Request.IsAuthenticated && User.IsInRole("Admin") ? "<a title='Edit' id='lnkEdit' ></a>" : "";
}
Run Code Online (Sandbox Code Playgroud)
你可以使用if块,我使用三元运算符作为块中的一条线.有了这个地方,你可以写你的脚本为
//what ever was here
{
return '<a title="Details" id="lnkDetails" ></a>' + '@additionalString' +'<a title="Delete" id="lnkDelete" ></i></a>';
}
Run Code Online (Sandbox Code Playgroud)
<script>您可以在此处使用@和变量名访问C#变量.
注意:不要错过' '周围@additionalString..
编辑:在您提供更多详细信息之后,如果您在JavaScript中设置一个变量true或者false基于该变量,则更好User.IsInRole("Admin").为此,请将此部分代码添加到视图页面中.
@{
string isAdmin = Request.IsAuthenticated && User.IsInRole("Admin") ? true : false;
}
Run Code Online (Sandbox Code Playgroud)
现在将此分配给javascript变量,如
<script>
var UserIsAdmin = @Html.Raw(@isAdmin); // assign C# variable to JavaScript variable.
</script>
Run Code Online (Sandbox Code Playgroud)
有了这个,您就可以在所有脚本中使用此变量.
所以对代码的更改是
"render": function (data, type, full, meta) {
var renderHtml = '<a title="Details" id="lnkStudentDetails"></a>';
if(UserIsAdmin){
renderHtml +='<a title="Edit" id="lnkStudentEdit" ></a>';
}
renderHtml += '<a title="Delete" id="lnkStudentDelete" ></i></a>';
return renderHtml;
}
Run Code Online (Sandbox Code Playgroud)
以及你的事件处理程序
$(document).on('click', '#lnkStudentDetails', function () {
// UserIsAdmin variable can be used to check if user is admin or not.
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
645 次 |
| 最近记录: |