如何在HTML字符串中使用User.IsInRole()?

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)

Raj*_*ddy 5

好像你正在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)