2013-03-21 62 views
2

我有一个Razor视图具有:剃刀布尔HTML5属性被大写防止条件语句中的jQuery

<select id="roletypeddl" > 
    <option value="@roletype.Id" selected="selected" data-assignabletoperson="@roletype.AssignableToPerson" >@roletype.Name</option> 
</select> 

所以在jQuery的,我想运行一些代码,如果数据assignabletoperson是真实的,因此:

if ($('#roletypeddl').find('option:selected').data('assignabletoperson') == true) 
{ 
    do something 
} 

麻烦的是,这段代码永远不会被执行。

我想它与HTML正在生产之中的事:

<select id="roletypeddl"> 
    <option data-assignabletoperson="True" selected="selected" value="5">Manufacturer</option> 
</select> 

我认为问题是,“真”是大写。任何人都知道如何解决这个问题?

回答

2

data-属性不知道你的数据类型。 @roletype.AssignableToPerson HTML输出True,但这不是布尔值,这是串...

下面的语句

data-assignabletoperson="True" 

不是布尔值,它的字符串,所以你应该比较像这样:

if ($('#roletypeddl').find('option:selected').data('assignabletoperson') == "True") 
{ 
    do something 
} 

更新:data知道您的数据类型。问题是“真”。它必须是“真实的”。

而且EXAMPLE

+0

谢谢,有道理,有效。奇怪,因为正确的答案在http://stackoverflow.com/questions/9921076/retrieve-boolean-data-from-data-attribute-in-jquery似乎不同意这一点,并说数据()可以处理布尔数据? – user2005657 2013-03-21 08:20:06

+0

是的。我看到了,你是对的。答案是你的建议'我认为问题是“真”是资本化的 – 2013-03-21 08:22:20

0

尝试使用:

data-assignabletoperson="@roletype.AssignableToPerson.ToLower()" 

EG。

<select id="roletypeddl" > 
    <option value="@roletype.Id" selected="selected" data-assignabletoperson="@roletype.AssignableToPerson.ToLower()" >@roletype.Name</option> 
</select> 

参见:

Why does Boolean.ToString output “True” and not “true”

此外,您可以使用JavaScript:

.toLowerCase()

例如:

if ($('#roletypeddl').find('option:selected').data('assignabletoperson').toLowerCase() == 'true') 
{ 
    //do something 
}