2015-11-03 222 views
0

我的ASP .Net頁面有一個從AJAX加載的轉發器。這個AJAX頁面中繼器有一列複選框。中繼器在html表格內。Checkbox click event not firing

<input id="chkOptionSelected" runat="server" enableviewstate="false" 
type="checkbox" data-bind="click: Add" /> 

在主頁上,我有一個標籤,它的值是通過JavaScript函數來計算。我的查看模式:

function VM() { 
    var self = this; 
    self.totalSqft = ko.observable(TotalSqFt); 
    self.Add = function() { 
     self.totalSqft(TotalSqFt); 
     return true; 
    }; 
} 
ko.applyBindings(new VM()); 

TotalSqFt是一個全局變量。標籤是:

<asp:Label ID="lblTotalSqFt" runat="server" ClientIDMode="Static" data-bind="text: totalSqft"></asp:Label> 

click事件計算在JavaScript函數的新的總。所有視圖模型需要做的就是用新值更新標籤。

我在做什麼錯?是否因爲複選框在AJAX內容中?我可以在視圖源中看到這一切。

回答

0

像@Jeroen所說的,asp:Lable將由服務器處理並在客戶端以不同的方式渲染。

因此,你可以使用正常的HTML label和使用runat="server",如果你想在服務器

檢查這方面的工作演示http://jsfiddle.net/91mek1tk/

+0

是的,將嘗試HTML標籤,看看它是否工作。謝謝。 – Veena

+0

我意識到我的問題是什麼。點擊複選框會引發另一個計算總數的事件。我將不得不將另一個事件附加到複選框。 – Veena

+0

我更改了演示:http://jsfiddle.net/91mek1tk/7/現在,self.totalSqft具有正確的值,但標籤沒有更新。我將標籤更改爲HTML標籤。 它沒有更新。 – Veena

0

問題的直接原因很可能是上的asp:Label未呈現。您需要撥打Attributes.Add or something similar才能添加。

話雖如此,你混淆了Webforms和KnockoutJS等客戶端重型技術,這可能會否定使用KO會帶來的好處,或者更糟的是會導致很多不方便的情況,現在有了。我建議或者從asp控件轉移到更多面向html的控件(比如你使用第一個input標籤),或者放棄KO以支持其他更簡單的客戶端技術(這看起來更合適,因爲你目前正在使用KO只是爲了處理點擊,而它主要擅長雙向數據綁定任務)。

+0

謝謝Jeroen。我正在用jQuery和JavaScript做很多客戶端計算。我不想讓服務器端的調用只更新一個標籤。將嘗試將服務器控件更改爲html標籤。再次感謝。 – Veena

-1

試試這個爲你的JavaScript函數來訪問它:

function VM() { 
    var self = this; 
    self.totalSqft = ko.observable("totalSqft"); 
    self.Add = function() { 
     self.totalSqft("totalSqft"); 
     return true; 
    }; 
} 
ko.applyBindings(new VM()); 
+0

downvote的任何理由? –

-1

謝謝,JAG。我調整了演示並使其工作。我在其中一行中輸入了val而不是文本,因此沒有看到反映的值。現在正在工作。感謝大家。

+1

請在答案*中包含您的解決方案*的實際完整(但最小)代碼,以便可以幫助其他人解決同樣的問題。 – Jeroen