2

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

谢谢!

4

3 回答 3

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());
于 2013-06-28T22:52:36.007 回答
0

如何扩展淘汰赛 observables 以从绑定中读取默认值?

这个对基本相同问题的回答是您最好、最灵活的选择。当绑定初始化时,它将存储输入的当前值在 observable 中

于 2013-06-29T01:05:02.663 回答
0

我没有将 KO 与 WebForms 一起使用,但我认为这与 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>
于 2013-06-29T07:26:29.283 回答