我的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内容中吗?我可以在视图源中看到它。
答案 0 :(得分:0)
问题的直接原因很可能是data-bind
上的asp:Label
未呈现。您需要致电Attributes.Add
or something similar进行添加。
话虽如此,你正在混合Webforms和像KnockoutJS这样的客户端重技术,这可能会否定你使用KO所带来的好处,或者更糟糕的是导致许多不方便的案例,比如你的那个现在有。我建议要么从asp控件转向更多面向html的控件(就像你用第一个input
标签做的那样),要么放弃KO而转向其他更简单的客户端技术(这似乎更合适,因为你“目前仅使用KO来处理点击,而它主要用于双向数据绑定任务。”
答案 1 :(得分:0)
asp:Lable
将由服务器处理,并在客户端以不同方式呈现。
所以你可以使用普通的html label
,如果你想在服务器上访问它,可以使用runat="server"
答案 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而不是文本作为标签,因此没有看到反射值。它现在正在工作。感谢大家。