我有一个带有KnockoutJS绑定控件的ASP.NET C#网页:
<asp:TextBox runat="server" ID="txtOfferName" placeholder="Offer Name" data-bind="value: planName"></asp:TextBox>
和
planName: ko.observable("")
...设置文档加载。当txtOfferName应该以空白开始时,一切正常。现在,我想将txtOfferName的值设置为在Page_Load期间不为空的内容。如果我只是做
txtOfferName.Text = "New Value";
它将无法工作,因为ko.observable(“”)将在绑定后覆盖该值。有没有办法绑定一个observable并将它默认为它所绑定的控件的初始值?我当然可以做到
ko.observable("New Value")
但是值来自数据库,因此在前端而不是后端设置它们要困难得多。在最糟糕的情况下,我可以序列化所有这些值,将它们放入隐藏字段并使用KO进行分配,但我想检查一下是否有更简单的方法。
谢谢!
答案 0 :(得分:0)
<%@ Page ClientIDMode="Static" %>
<input type="hidden" runat="server" id="hdnOfferName" />
<asp:TextBox runat="server" ID="txtOfferName" placeholder="Offer Name" data-bind="value: planName"></asp:TextBox>
//code behind
hdnOfferName.Value = "New Value";
//javascript (this is $jquery, use document.getElementById() for javascript)
planName = ko.observable($("#hdnOfferName").val());
答案 1 :(得分:0)
How to extend knockout observables to read default value from binding?
这个基本相同问题的答案是您最好,最灵活的选择。当绑定初始化时,它将存储输入的当前值在可观察的
中的任何内容答案 2 :(得分:0)
我没有在WebForms中使用KO,但我认为它与MVC的想法相同。在ASP.NET MVC中,我在调用ko.applyBinding
之前设置了默认值...
<asp:TextBox runat="server" data-bind="value: planName"></asp:TextBox>
<script src="viewModel.js" />
<script type="text/javascript">
myViewModel.planName('<%=Stuff.planName%>');
ko.applyBinding(myViewModel);
</script>