KnockoutJs applyBindings清除Asp.net Webforms设置的默认值

时间:2014-12-03 19:34:02

标签: knockout.js webforms

我是KnockOutJs的新手,并开发了一个使用KnockOutJs来维护客户端模型状态和Asp.Net Webforms的页面。 当我从服务器请求页面时,控件(如文本框,跨度)已经被后面的Asp.Net代码填充。

<asp:TextBox runat="server" class="form-control" text="John" data-bind="value: firstName" id="txtFirstName"></asp:TextBox>

现在在我的javascript中定义我的viewmodel

var viewModel = { userId = ko.observable() }
ko.applyBindings(viewModel);

applyBindings语句导致文本框的值被重置,因为我没有在ko.observable()中定义我的初始值。

applyBindings是否存在重载,不会将模型应用于DOM元素,只是将模型与DOM绑定或反向(即从DOM读取值到模型中)

1 个答案:

答案 0 :(得分:2)

最好使用服务器端代码填充您的viewmodel,而不是使用服务器端代码来填充文本框。

var viewModel = { firstName = ko.observable('<%= HttpUtility.JavaScriptStringEncode(FirstName) %>') };
ko.applyBindings(viewModel);

或者理想情况下,您将在服务器端创建一个模型,并使用json.net将其序列化为json:

function ViewModel(model) {
    var self = this;

    self.firstName = ko.observable(model.FirstName);
};

var model = <%= JsonConvert.SerializeObject(Model) %>;
var viewModel = new ViewModel(model);
ko.applyBindings(viewModel);