我有一个使用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
答案 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 templates和 Knockout 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' />