2016-07-01 23 views
2

にリスト に動的に追加コントロールをバインド MVC - レイザー(.cshtml)ビューとMVC 5を使用してモデル

あなたは最終的にからデータを取得する必要がモデルの値のリストを持っていますビューでコントロールし、リストに追加します。例えば

モデルが含まれています:public List<string> value { get; set; }

リストは、最大70個の値を含むように許可されているが、あまりを含めることができます。 List<string> valueに追加する必要があり、それが対応するの値を作成されたそれぞれの新しいフィールドでenter image description here

ビューでは、動的にずっとこのような@Html.editorforフィールドを、追加ボタンを持っています。したがって、この例では、

ユーザーは、「フィールドを追加」をクリックする新しいテキストボックスが表示され、彼が提出したときは「ライン1」

  • は、このフィールドは、値の最初のインデックスに掲載します入り - 彼は「ライン2」

    • 提出した場合、このフィールドはSEに掲載する予定に入っvalue[0] = "Line 1"

    ユーザーが別の値を追加するには、再度「フィールドを追加」をクリック:そうのようなリストそのような値リストの指揮インデックス:ユーザーが70のフィールドまで追加することができますvalue[1] = "Line 2"

(つまり彼は、値の一覧に65個の値を追加するには、「フィールドを追加」65回をクリックすることができます)

何だろうこの方法でデータをバインドする最も迅速かつ効率的な方法はありますか?

+1

ボタンの中で '。() 'イベントを呼び出すために、' 'をDOMに動的に追加するだけです。コレクションが 'string'(または他の単純な値型)のコレクションである場合、インデクサーは必要ありません –

答えて

4

提出する前に、動的に追加された入力に正しいモデル名が付いていることを確認してください。

<input type="text" name="value[0]" value="Line 1"/> 
    <input type="text" name="value[1]" value="Line 2"/> 
    <input type="text" name="value[3]" value="Line 3"/> 

そして、モデルバインダーは、自動的にこれらの3つの文字列(「ライン1」、「ライン2」、「3行」)とstringのリストを作成します。だからあなたの例では、これに似たものになるだろう対応するプロパティ(この場合はvalue)に割り当てます。

編集:ここではあなたなaddField機能がちょうどそれをするようになります方法は次のとおりです。

すべてです
function addField(){ 
    var addedFieldCount=$('input.dynamic-field').length; 
    if(addedFieldCount==70){//But you should check it on the server side too. 
     alert('No more field allowed'); 
     return; 
    } 
    $('#fieldContainer').append('<input name="value['+addedFieldCount+']"/>'); 
} 

。それをハードコーディングと呼ぶなら、それを呼んでください。

EDIT2:Stephen Muecke氏によると、stringのコレクションを扱う際にインデクサーは必要ありません。 (私はそれを知らなかった:))。したがって、あなたの関数はもっと簡単になります:

function addField(){ 
    var addedFieldCount=$('input.dynamic-field').length; 
    if(addedFieldCount==70){//But you should check it on the server side too. 
     alert('No more field allowed'); 
     return; 
    } 
    $('#fieldContainer').append('<input name="value"/>'); 
}  
+0

また、ユーザーが入力したいフィールドの数がわからないので、'

+0

@ Collat​​eral.dmg、私の答えを掲載したとき、OPはこれ以上情報を提供していなかった。彼はちょうどクライアント側の値をモデルにバインドする必要がありました。 –

+0

また、DOM入力値とモデル値を一致させるビルトインモデルバインディングを作成するには、対応するモデル名を持つ入力をリクエストに渡す必要があります。これらの入力をどのように埋めるかを決定するのはクライアント側の仕事です。この場合、70個の入力を最大にするために、クライアント側またはサーバー側の検証またはそれらの2つの組み合わせを使用できます。 –

関連する問題