2017-08-25 33 views
2

我在我的视图中有jQuery函数。从jQuery模型中使用bool

和可变在我的视图模型:

public bool pageChanged { get; set; } 

功能:

$(document).ready(function() { 
    if (@Model.pageChanged == true) { 
     $('html, body').animate({ 
       scrollTop: $("#picture_section").offset().top 
     }, 2000); 
    } 
}); 

没有if语句,它工作正常。但是如果我想比较我的模型的布尔值,它不起作用。我试过alert(“@ Model.pageChanged”),它显示了正确的值。

所以,我想

if(@Model.pageChanged) { 
} 

if(@Model.pageChanged == true) { 
} 

但没有奏效。我怎么能改变if语句的工作?类型有问题吗?

谢谢你解决问题。

+0

如果你想获得jQuery中的MVC对象,使用'@ Model.pageChanged'' –

+0

'if(@ Html.Raw(Json.Encode(@ Model.pageChanged))== true){...}'(或者只是if(@ Html.Raw(Json .Encode(@ Model.pageChanged))){...}' –

+0

@StephenMuecke谢谢。它的工作原理! –

回答

0

因此,客户端和服务器之间可能存在界限。视图中的模型代码在您拥有它的上下文中基本上决定了呈现给视图的内容。所以,如果你有这样的:

if (@Model.pageChanged == true) { 

服务器端代码呈现pageChanged到客户端的价值,但我发现有与渲染虚假的问题。一个常见的解决方法是:

if (@Model.pageChanged.ToString().ToLower() == true) { 

这会使:

if (true == true) { 

OR

if (false == true) { 

所以你不一定需要 “==真” 的一部分。

如果你想控制一下JS居然被渲染,你可以这样做:

$(document).ready(function() { 
    @if (Model.pageChanged == true) { 
     <text> 
     $('html, body').animate({ 
      scrollTop: $("#picture_section").offset().top 
     }, 2000); 
     </text> 
    } 
}); 

这样的文字:

@if (Model.pageChanged == true) { 

变为一个服务器端的评估,并确定了jQuery是否动画语句事件根据pageChanged的值进行渲染。

+0

谢谢。它解决了它,但为什么必须有分数?没有他们,它没有工作。 –