我正在开发一个MVC3应用程序。在我的操作中,我有ViewBag对象具有true或false值 - 我使用断点并且可以看到在操作中,它们具有正确的值。 现在,当我到达视图时,我想在jQuery中检查这些ViewBag对象 代码:
if (@ViewBag.ind == true) {
$objKpr = $(".@ViewBag.kpr");
$objKpr.click();
}
当我使用Firebug测试自己的代码时,它返回
if (False == false)
{
$objKpr = $(".@ViewBag.kpr");
$objKpr.click();
}
Viewbag被解释为'False',而不是一个值为false的变量。为什么会发生这种情况?
感谢您的回答 但问题出在另一个问题 - 为什么jQuery中的ViewBag不会产生正确的值?
答案 0 :(得分:1)
您只需使用
即可var condition = @(myBooleanVariableInCSharp ? "true" : "false";
if (condition == true) {
$objKpr = $(".@ViewBag.kpr");
$objKpr.click();
}
您应该使用@ViewBag.ind.ToString().ToLower()
。您需要转换JavaScript可以理解的值。
您的问题,因为bool值在javascript中为小写,在C#中为大写
像
if (@ViewBag.ind.ToString().ToLower() == true) {
$objKpr = $(".@ViewBag.kpr");
$objKpr.click();
}
答案 1 :(得分:1)
在代码中调用@ViewBag.MyProperty
将导致Razor引擎通过调用值ToString()
来呈现属性。 E.g。
if (@ViewBag.ind == true) {
呈现为:
if (True == true) {
因此,您可能希望将代码更改为:
if (@ViewBag.ind.ToString().ToLowerInvariant() === true)
虽然ViewBag
中的值仅可用于在呈现页面时注入JavaScript / View。它们不像JavaScript那样动态,变量在客户端保存,可以根据需要多次翻转/更改。
您可能希望使用该技术为脚本注入初始值:
$(document).ready(function () {
var ind = @ViewBag.ind.ToString().ToLowerInvariant();
DoSomething(ind);
});
function DoSomething(ind) {
if (ind) {
$objKpr = $(".@ViewBag.kpr");
$objKpr.click();
}
}
通过这种方式,您可以在渲染时初始化ind
的行为,但随后在客户端更改ind
的值,并使用不同的值多次调用函数DoSomething()
。 / p>
您可能希望研究使用JSON,AJAX调用和JavaScript模块模式。
答案 2 :(得分:0)
试试这个;
if ("@(ViewBag.ind == null ? "false" : ViewBag.ind.ToString().ToLower())" === "true") {
即使ViewBag.ind
为空,也不会出错。
谢谢!