0

ASP.Net MVC は初めてです。オンライン教育システムを開発して MVC3 を学ぼうとしています。ビューモデルを使用して、ビューからコントローラーにjavascriptによって作成されたテキストボックスとドロップダウンの値を渡すという問題に直面しています。学生が現在の資格のリストを追加するシナリオがあります。 ここに画像の説明を入力

上の画像では、私の問題を説明しようとしました。

最初は教育の 1 行のみがビュー ページに表示されます。生徒が [追加] ボタンをクリックすると、その下に新しい行が追加されます。

StudentEducation ViewModel を作成しました。このようなスタックオーバーフローに関するいくつかの質問も調査しました。全体として、ジェネリック リスト プロパティが作成され、それをループしてビューにコントロールを作成することがわかりました。しかし、私の問題は、最初はリストにオブジェクトがないことです。つまり、学生が追加する資格の数を設定できません。

この点で私を助けてください。

4

2 に答える 2

0

基本的に、リストにモデルバインドする必要があります。JavaScript を介してテーブルに追加する新しい行ごとに、正しい ID を html 入力に設定する必要があります。

私は何度か同じ問題に直面しましたが、 Phil Haack によるこの記事が問題の解決に役立ちました。

ユーザーが「追加」ボタンを押したときに使用する新しい行を生成することになりました(ただし、私の場合は複数回入力できるサブフォーム全体でした)。また、挿入する行の正しいシーケンス番号を計算する JavaScript ヘルパー関数も実装しました。コントローラーで何も変更する必要はありませんでした。モデル バインディングが機能しただけです。

于 2013-07-27T09:59:07.790 に答える
0

StudentEducation 投稿でアクションという名前のViewModelがあるとしましょう。いいねが必要List<StudentEducation>です

[HttpPost]
public Action MyAction(List<StudentEducation> students)
{
 ...
}

ビューをフェッチするための get アクションも必要です。最初は空で、レコードは含まれていません

public Action MyAction()
{
   //here, initialize your 
   //List<StudentEducation> vm = new List<StudentEducation>();
   // and send it to view like
   return View(vm);
}

厳密に型指定されたビューも必要です。ビューでは、モデルを反復して次のようなリスト項目を作成する必要があります

@model IEnummerable<StudentEducation>

for(var i=0;i<@Model.count;i++)
{
   @Html.TextBoxFor(o=>o[i].PropertyName)
}

これが興味深いことです。生成された HTML マークアップが次のような場合、リストは適切にバインドされます

<input type="text" value="something" name="[1].PropertyName" />

ここname="[1].PropertyName"が一番重要です。このパターンの名前でリスト HTML を作成すると、List<Studenteducatio>フォーム送信時に入力されます

于 2013-07-27T10:02:31.203 に答える