C# 如何使用knockout js指定name属性

C# 如何使用knockout js指定name属性,c#,asp.net-mvc-3,knockout.js,C#,Asp.net Mvc 3,Knockout.js,我有一个使用knockoutjs/mvc3的绑定列表 <div data-bind="foreach: phones"> <input data-bind='value: number' /> </div> 以前,我可以使用Jquery通过指定输入上的名称绑定到我的列表 <input name="Phones[0].Name" Phones[1].Number etc.. 也许您可以创建一个自定义绑定来设置name

我有一个使用knockoutjs/mvc3的绑定列表

<div data-bind="foreach: phones">
   <input data-bind='value: number' />
</div>
以前,我可以使用Jquery通过指定输入上的名称绑定到我的列表

 <input name="Phones[0].Name"
              Phones[1].Number etc..

也许您可以创建一个自定义绑定来设置name属性。看这里:

那么你应该能够写:

<input data-bind='yourBindingName: Name'  />

您可以使用模板或类似的foreach中的attr绑定来执行此操作,前提是您的电话号码位于可观察的数组中

<input data-bind='attr: { name: "Phones["+$index()+"].Name"}' />

我还假设您使用的是最新版本的knockout,因此您可以使用$index


这将允许您命名输入,以便它们与MVC模型绑定一起工作。

您可以使用“uniqueName”,内置敲除。以下是文件:

如果需要自定义绑定(例如生成唯一id),可以使用自定义绑定:

以下是unuqueName和uniqueId的有用答案: 和

我的唯一id生成实现是:

ko.bindingHandlers.uniqueId = {
    init: function (element, valueAccessor) {
        if (valueAccessor()) {
            element.id = ko.bindingHandlers.uniqueId.prefix + (++ko.bindingHandlers.uniqueId.counter);
        }
    },
    counter: 0,
    prefix: "unique_id_"
};

谢谢您的回复。那看起来很棒。。当我检查输入时,它与这里的完全相同。。美元指数不变。我有来自fresh clone的v2.1.0版本-这是正确的版本吗?是的,它在2.1.0中。我的回答中有几个拼写错误,我现在已经改正了。
ko.bindingHandlers.uniqueId = {
    init: function (element, valueAccessor) {
        if (valueAccessor()) {
            element.id = ko.bindingHandlers.uniqueId.prefix + (++ko.bindingHandlers.uniqueId.counter);
        }
    },
    counter: 0,
    prefix: "unique_id_"
};