复选框单击事件未触发

时间:2015-11-03 20:26:17

标签: asp.net knockout.js webforms

我的ASP .Net页面有一个从AJAX加载的转发器。这个AJAX页面转发器有一列复选框。转发器位于html表中。

<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内容中吗?我可以在视图源中看到它。

4 个答案:

答案 0 :(得分:0)

问题的直接原因很可能是data-bind上的asp:Label未呈现。您需要致电Attributes.Add or something similar进行添加。

话虽如此,你正在混合Webforms和像KnockoutJS这样的客户端重技术,这可能会否定你使用KO所带来的好处,或者更糟糕的是导致许多不方便的案例,比如你的那个现在有。我建议要么从asp控件转向更多面向html的控件(就像你用第一个input标签做的那样),要么放弃KO而转向其他更简单的客户端技术(这似乎更合适,因为你“目前仅使用KO来处理点击,而它主要用于双向数据绑定任务。”

答案 1 :(得分:0)

像@Jeroen所说,asp:Lable将由服务器处理,并在客户端以不同方式呈现。

所以你可以使用普通的html label,如果你想在服务器上访问它,可以使用runat="server"

查看此工作演示http://jsfiddle.net/91mek1tk/

答案 2 :(得分:-1)

试试这个javascript函数:

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

答案 3 :(得分:-1)

谢谢你,JAG。我调整了演示并使其正常工作。我在其中一行中使用了val而不是文本作为标签,因此没有看到反射值。它现在正在工作。感谢大家。