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..

しかし、私は今ノックアウトを使用しています。これがどのように機能するかはわかりません。誰もが私を正しい方向に導きます。

Ta

4

3 に答える 3

52

これは、テンプレートのattrバインディングを使用するか、電話番号が監視可能な配列にあると仮定して、このようにforeachを使用して行うことができます。

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

また、$ indexを使用できるように、最新バージョンのノックアウトを使用していると想定しています。

これにより、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の有用な回答です。knockout.js テンプレートの一意のIDKnockoutJSの「uniqueName」バインディング-2つのフィールドに同じ名前

一意の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

たぶん、name属性を設定するカスタムバインディングを作成することができます。ここを見てください:http: //knockoutjs.com/documentation/custom-bindings.html

次に、次のように書くことができるはずです。

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