2015-09-17 80 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>