2015-09-17 109 views
1

我試圖使用一個布爾MVC ViewBag屬性,該屬性是在javascript if語句的控制器中設置的。但是,由於屬性值轉換爲Pascal大小寫,因此引入了一個問題。例如,「真」變成「真」,「假」變成「假」。將MVC ViewBag屬性轉換爲小寫

<script type="text/javascript"> 
    var error = @ViewBag.Dropped; 
    if (error) { 
     $('#alert-message').addClass('alert-success alert-dismissable'); 
    } 
</script> 

如何確保將該屬性轉換爲小寫。我試過使用JavaScript函數.toLowerCase()並且不成功。

+0

您需要考慮屬性是字符串還是布爾值。 True值可能實際上是一個布爾值(因此是這種情況),當它在Javascript中賦值時它會轉換爲一個字符串。 –

+0

它與大寫或小寫無關。 var error = @ ViewBag.Dropped;'返回一個文本值如果if(error){'將總是被評估爲true - 你需要'if(error ==='True'){' –

+0

use @ Json.Encode (ViewBag.Dropped),它爲我工作。我在JS中使用CS文件中的bool prop。 –

回答

5

一種方法是:

<script type="text/javascript"> 
    var error = @(ViewBag.Dropped ? "true" : "false"); 
    if (error) { 
     $('#alert-message').addClass('alert-success alert-dismissable'); 
    } 
</script> 
3
var error = @ViewBag.Dropped.ToString().ToLower(); 
1

我不認爲上述答案將工作,因爲所有的字符串都是在Javascript真實的,..你可能想

<script type="text/javascript"> 
    var error = @(ViewBag.Dropped ? true : false); 
    if (error) { 
     $('#alert-message').addClass('alert-success alert-dismissable'); 
    } 
</script> 

記如果你引用true和false,它們就變成了字符串,而真實與「true」不一樣。

+0

你可能不明白我的答案(你指的是)。該字符串是服務器端(asp,剃鬚刀...)它被評估並寫入到客戶端沒有引號。 – Amit

+0

mea culpa - 我應該仔細看看:-) –

0

我用這個方法的所有時間,因爲更長的版本(value.ToString().ToLowerInvariant())過於繁瑣輸入所有的時間:

添加類到您的項目或庫:

public static class ExtensionMethods 
{ 
    public static string ToJS(this bool value) 
    { 
     return value.ToString().ToLowerInvariant(); 
    } 
} 

然後在您的js:

<script type="text/javascript"> 
    var error = @ViewBag.Dropped.ToJS(); 
    if (error) { 
     $('#alert-message').addClass('alert-success alert-dismissable'); 
    } 
</script>