如何在ASP.NET和KnockoutJS中将ko.observable的默认值设置为控件本身的默认值?

时间:2013-06-28 22:30:50

标签: c# asp.net knockout.js

我有一个带有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进行分配,但我想检查一下是否有更简单的方法。

谢谢!

3 个答案:

答案 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>