如何使用knockout js指定name属性

时间:2012-05-29 06:00:58

标签: c# asp.net-mvc-3 knockout.js

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

<div data-bind="foreach: phones">
   <input data-bind='value: number' />
</div>

将此发送到我的控制器操作

[HttpPost]
public ActionResult Index([Deserialize] WizardModel wizard, IStepViewModel step)
{
}

以前我能够绑定到我的List&lt; T>通过在输入上指定名称

来使用Jquery
 <input name="Phones[0].Name"
              Phones[1].Number etc..

但我现在正在使用淘汰赛我不清楚这应该如何运作。任何人都指引我朝着正确的方向前进。

TA

3 个答案:

答案 0 :(得分:51)

您可以使用模板中的attr绑定或foreach这样做,假设您的电话号码位于可观察的数组中。

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

我还假设您正在使用最新版本的淘汰赛,因此您可以使用$ index。

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

答案 1 :(得分:1)

你可以使用'uniqueName',在淘汰赛中建立。这是文档: http://knockoutjs.com/documentation/uniqueName-binding.html

如果您想要自定义绑定(例如唯一ID生成),您可以使用自定义绑定: http://knockoutjs.com/documentation/custom-bindings.html

这些是unuqueName和uniqueId的有用答案: Unique ids in knockout.js templatesKnockout JS "uniqueName" binding - Same name to two fields

我对唯一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_"
};

答案 2 :(得分:0)

也许您可以创建一个设置name属性的自定义绑定。看这里: http://knockoutjs.com/documentation/custom-bindings.html

然后你应该写:

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