2015-05-02 262 views
1

從剃刀調用Javascript方法問題背景:無法「IF」語句

我attemting檢查,如果用戶登錄到我的網站時,一個視圖渲染。

問題:

目前我設置用戶名稱爲ViewBag財產的控制器,然後訪問該在其各自的視圖。我面臨的問題是我的Razor語法中的IF語句似乎並未檢查ViewBag.userName屬性,而是反過來又沒有調用JavaScript方法來設置具有用戶名稱的按鈕的內部HTML。

作爲一個便箋,我有 - 作爲一個測試 - 將ViewBag屬性設置爲一個h3標記,以確保用戶名稱被傳遞到視圖。

代碼:

我的控制器,其中的用戶名設爲:

ViewBag.userName = Session["userName"]; 

的觀點:

檢查ViewBag物業使用者名稱的狀態,如果它不爲空即用戶已登錄,然後調用ShowUsersName方法將值設置爲按鈕內部的HTML。

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

     ShowUsersName(userName); 
    </script> 
} 

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> 
+0

爲了確保只是檢查你的頁面查看源代碼,如果你發現在IF塊中的語句的話,正確的執行,現在的問題是在JS函數中。 –

+0

您的代碼片段是否完整? ShowUsersName中有關閉腳本標記嗎?另外我會在var userName =「@ ViewBag.userName」中附上帶有雙引號的「@ ViewBag.userName」; – nimeshjm

+0

另外,它應該是ShowUsersName(userName); ? – nimeshjm

回答

2

我不認爲簡單地把一個腳本標記的if語句裏面會造成的JavaScript運行。您需要綁定這個對身體的負荷(或其他事件)

<body onload='jsFunction()'> 

,如果你使用jQuery,你可以有一個腳本部分:

$(document).ready(function() { 
    //your code 
}); 

一兩件事你可以做在你的if語句創建一個具有用戶名值一個隱藏的元素或輸入:

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

,並在您的jQuery(如果你使用jQuery):

$(document).ready(function() { 
    var userName = ''; 
    userName = $('#user-name').text(); 
    if (userName != '') { 
    //your code if userName is not empty 
    } 
}); 

沿着這些線。這只是一個簡單的例子,你可能會發現一個替代方法做到這一點

+0

優秀的答案。我使用JQuery並使用隱藏的div方法。它完美的作品。出於興趣,當我刷新頁面時,更改的html丟失了,如何在刷新後保留它? – user1352057

+0

刷新頁面時,您正在控制器中觸發一個操作方法。再次在瀏覽包中發送用戶名。希望有所幫助 –

0

確保你的viewbag不爲空。您也可以嘗試刪除if語句以查看它是否呈現腳本。 爲了測試viewbag的你可以做的內容:

<h1>@ViewBag.userName</h1>