我有一个使用knockoutjs / mvc3的绑定列表
<div data-bind="foreach: phones">
<input data-bind='value: number' />
</div>
将此代码发送到我的控制器操作,即
[HttpPost]
public ActionResult Index([Deserialize] WizardModel wizard, IStepViewModel step)
{
}
以前,我可以使用Jquery绑定到我的List< T>,方法是在输入上指定名称
<input name="Phones[0].Name"
Phones[1].Number etc..
但我现在使用的是knockout,我不清楚它是如何工作的。谁能给我指引一个正确的方向。
标签
发布于 2012-05-29 17:25:43
您可以使用模板或foreach中的attr绑定来实现这一点,假设您的电话号码在一个可观察的数组中。
<input data-bind='attr: { name: "Phones["+$index()+"].Name"}' />
我还假设你使用的是最新版本的knockout,这样你就可以使用$index了。
这将允许您命名输入,以便它们与MVC模型绑定一起工作。
发布于 2013-01-11 17:01:46
你可以使用‘唯一名称’,内置knockout。下面是文档: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_"
};
发布于 2012-05-29 15:36:52
也许您可以创建一个自定义绑定来设置name属性。看这里:http://knockoutjs.com/documentation/custom-bindings.html
然后你应该能够写:
<input data-bind='yourBindingName: Name' />
https://stackoverflow.com/questions/10793803
复制相似问题