Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.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
无法从Razor调用Javascript方法';如果';陈述_Javascript_C#_Asp.net Mvc_Asp.net Mvc 4_Razor - Fatal编程技术网

无法从Razor调用Javascript方法';如果';陈述

无法从Razor调用Javascript方法';如果';陈述,javascript,c#,asp.net-mvc,asp.net-mvc-4,razor,Javascript,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,问题背景: 我试图在呈现视图时检查用户是否登录到我的站点 问题: 目前,我将用户用户名设置为控制器中的ViewBag属性,然后在其各自的视图中访问该属性。我面临的问题是,Razor语法中的IF语句似乎没有检查ViewBag.userName属性,而不是调用JavaScript方法来设置按钮的内部HTML和用户名 作为补充说明,作为测试,我将ViewBag属性设置为h3标记,以确保用户名被传递到它所在的视图 代码: 设置用户名的我的控制器: ViewBag.userName = Session["

问题背景:

我试图在呈现视图时检查用户是否登录到我的站点

问题:

目前,我将用户用户名设置为控制器中的ViewBag属性,然后在其各自的视图中访问该属性。我面临的问题是,Razor语法中的IF语句似乎没有检查ViewBag.userName属性,而不是调用JavaScript方法来设置按钮的内部HTML和用户名

作为补充说明,作为测试,我将ViewBag属性设置为h3标记,以确保用户名被传递到它所在的视图

代码:

设置用户名的我的控制器:

ViewBag.userName = Session["userName"];
观点:

检查ViewBag属性用户名的状态,如果它不为null,即用户已登录,则调用ShowUsersName方法将值设置为HTML

@if (ViewBag.userName != null)
{
    <script>
       var userName= @ViewBag.userName;

        ShowUsersName(userName);
    </script>
}
@if(ViewBag.userName!=null)
{
var userName=@ViewBag.userName;
ShowUsersName(用户名);
}
ShowUsersName方法:

<script type="text/javascript">

var ShowUsersName = function (userName) {

    var html = '<span class="glyphicon glyphicon-user"></span> Hi, '+ userName +'"<strong class="caret glyphicon glyphicon-triangle-bottom"></strong>';

    document.getElementById("userButton").innerHTML = html;

};
</script>

var ShowUsersName=函数(用户名){
var html='Hi',+userName+'”;
document.getElementById(“userButton”).innerHTML=html;
};

我不认为简单地在if语句中放置一个script标记会导致javascript运行。您需要在加载正文(或其他事件)时将其绑定到

可以做的一件事是在if语句中创建一个具有username值的隐藏元素或输入:

<div id='user-name' style='display:none;'>
@if (ViewBag.userName != null)
{
    @ViewBag.userName
}
</div>

这只是一个简单的示例,您可以找到另一种方法来执行此操作

请确保您的viewbag不为空。您还可以尝试删除if语句以查看它是否呈现脚本。 要测试viewbag的内容,可以执行以下操作:

<h1>@ViewBag.userName</h1> 
@ViewBag.userName

为了确保只需检查页面的视图源代码,如果在if块中找到语句,那么它就会正确运行,现在问题出在JS函数中。您的代码片段是否完整?ShowUsersName中是否有结束脚本标记?另外,我会在var userName=”中用双引号括起“@ViewBag.userName”@ViewBag.userName“也应该是ShowUsersName(用户名)?回答很好。我使用JQuery并使用了隐藏的div方法。它工作得很好。出于兴趣,当我刷新页面时,更改的html丢失了,我如何在刷新后保留它?当你刷新页面时,你在控制器中点击了一个动作方法。再次在viewbag中发送用户名。希望这能有所帮助
<div id='user-name' style='display:none;'>
@if (ViewBag.userName != null)
{
    @ViewBag.userName
}
</div>
$(document).ready(function() {  
   var userName = '';
   userName = $('#user-name').text();
   if (userName != '') {
    //your code if userName is not empty
   }
});
<h1>@ViewBag.userName</h1>