Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在jQuery中获得mvc用户角色_C#_Jquery_Asp.net Mvc - Fatal编程技术网

C# 如何在jQuery中获得mvc用户角色

C# 如何在jQuery中获得mvc用户角色,c#,jquery,asp.net-mvc,C#,Jquery,Asp.net Mvc,我在jQuery中有一个函数,可以根据用户角色禁用输入。但是我不知道如何在jQuery中获得当前的ASP.NETMVC用户角色 下面是代码,但它不起作用: $(function () { if (Roles.IsUserInRole('user')) { $("#GenericName").prop("disabled", true); $("#TradeName").prop("disabled", true);

我在jQuery中有一个函数,可以根据用户角色禁用输入。但是我不知道如何在jQuery中获得当前的ASP.NETMVC用户角色

下面是代码,但它不起作用:

$(function () {
        if (Roles.IsUserInRole('user'))
        {
            $("#GenericName").prop("disabled", true);
            $("#TradeName").prop("disabled", true);
            $("#Form").prop("disabled", true);
            $("#Strength").prop("disabled", true);
            $("#IsBrandSubstitutionAllowed").prop("disabled", true);
            $("#Route").prop("disabled", true);
            $("#Dosages").prop("disabled", true);
            $("#Unit").prop("disabled", true);     
            $("#PackTypes").prop("disabled", true);  
            $("#GeneratedDirection").prop("disabled", true);  
            $("#UserDirection").prop("disabled", true);  
            $("#StartDate").prop("disabled", true);  
            $("#EndDate").prop("disabled", true); 
        }
    });
如果在Razor视图中编写JavaScript代码,则只能使用C代码,如Roles.IsUserInRole(“用户”)


作为一种解决方法,您可以创建一个操作,在每次需要权限时告诉您需要向其发送请求的用户权限或角色。您还可以保留返回状态的副本以保存后续请求。根据您的项目,您可以更复杂地使用它,并将您的授权逻辑分开。

我建议进行AJAX调用以获得用户角色

在ajax调用之后,根据收到的响应禁用/启用输入

比如:

您的控制器名为
Controller1Controller

[HttpPost]
public JsonResult Action1(){
   return Json(new {
      user =  // put current user role here !
   });
}

另外,我建议使用
ValidateAntiForgeryToken
以避免CSRF攻击,但似乎没有问题,因为没有表单。

问题是:您混合了Javascript和Razor视图

你所拥有的:

if (Roles.IsUserInRole('user')) 
{
实际上应写为

var userRole = '@(Roles.IsUserInRole("user") ? "true" : "false")';
if(userRole) {
   ...
此代码
@(Roles.IsUserInRole('user')?“true):“false”)
将输出
true
false
文本字符串(因为它没有用单引号或双引号括起来,javascript将解释为布尔值),您可以使用新的赋值变量


我通常做的是,在我的
\u Layout.cshtml
视图中,我添加了一个简单的全局Javascript,我可以通过我的应用程序轻松调用它。。。例如,假设该视图上有一个
CurrentUser
对象(通过ViewData或Model):


使用MVC5.2.2,这对我来说很有效

var userRoleAdmin = '@(Request.IsAuthenticated && User.IsInRole("Admin")) ? "true" : "false")';
if(userRoleAdmin) {
   ...
在我的例子中,我必须像这样使用if条件

If(userRole=="true"){
    ...
} 

然后代码命中了条件,否则它将跳过它。

您面临什么错误?没有错误。它只是不起作用。谢谢你的回答。这就是我正在寻找的答案。组合jQuery和Razor视图。谢谢你的想法,谢谢你的回答。使用Json从控制器获取数据让人大开眼界。我以前从未这样做过。
if(AppGlobal.user.role === 'user') {
...
var userRoleAdmin = '@(Request.IsAuthenticated && User.IsInRole("Admin")) ? "true" : "false")';
if(userRoleAdmin) {
   ...
var userRole = '@(User.IsInRole("user") ? "true" : "false")';
if(userRole) {
   ...
If(userRole=="true"){
    ...
}