2017-08-25 13 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

謝謝。它解決了它,但爲什麼必須有分數?沒有他們,它沒有工作。 –