19

我有一个使用 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..

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

4

3 回答 3

52

您可以使用模板中的 attr 绑定来执行此操作,或者像这样假设您的电话号码位于可观察数组中。

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

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

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

于 2012-05-29T09:25:42.527 回答
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 - 两个字段同名

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

于 2013-01-11T09:01:46.453 回答
0

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

然后你应该可以写:

<input data-bind='yourBindingName: Name'  />
于 2012-05-29T07:36:52.290 回答