2016-09-29 3 views
-1

私は3つのdropdownlistforを編集モードで持っていますが、DDLForで正しいテキストを入力できますが、IDは送信時に0になりますが、それは正しいIDで出てくる。選択したテキストと値のドロップダウンリストASP.NET MVC

public List<SelectListItem> TeamOneList { get; set; } 
public string SelectedTeamOne { get; set; } 
.... //remaining properties for DDL's.......... 

コントローラ

List<SelectListItem> TeamOneList = new List<SelectListItem>(); 
foreach (var item in db.Teams) 
{ 
    TeamOneList.Add(new SelectListItem { Text = item.TeamName, Value = item.TeamId.ToString() }); 
} 
string SelectedTeamOne = db.Teams.Where(o => o.TeamId == fixture.TeamOneId).Select(s => s.TeamName).Single(); 

見る私のコード

ViewModelにされ、次の

@Html.DropDownListFor(model => model.TeamOneId, Model.TeamOneList, Model.SelectedTeamOne, new { @class = "form-control" }) 
+0

さらに簡単DropDownListFor 'の3番目のパラメータ()'ラベルがある( 'null'なのでオプション)

var model = new yourModelName { TeamOneList = db.Teams.Select(x => new SelectListItem> { Value = x.TeamId.ToString(), Text = x.TeamName }), SelectedTeamOne = fixture.TeamOneId // no need to make a database call }; return View(model); 

を使用したりすることができます。 '' Model.SelectedTeamOne'ではなく ''を選択してください。 –

+0

第2に、 'TeamName'プロパティにバインドしても、オプション値は' TeamId'プロパティ用です。 '.Select(s => s.TeamId)'でなければなりません( 'TeamId'は' int'のように見えるので 'SelectedTeamOne'も' string'ではなく 'int'でなければなりません) –

+0

編集モードではスティーブン – user3543878

答えて

1

あなたがTeamTeamId特性に基づくオプションvalue属性を生成するが、あなたが設定SelectedTeamOneの値はTeamNameという名前のプロパティに基づいているため、SelectedTeamOneの値はいずれのオプションとも一致しないため、最初のオプション(nullラベルオプション)が選択されています。そう、それは実際にあなたが唯一のnull値とオプションを選択するとき、あなたがそれを選択している表示されますSelectedTeamOneとして

しかし、あなたは同じテキストを持つnullラベルオプションを生成する(あなたのドロップダウンリストに同じ名前の二番目のオプションは、実際にあり)。

@Html.DropDownListFor(model => model.SelectedTeamOne, Model.TeamOneList, "-Please select-", new { @class = "form-control" }) 

を視野にコードを変更し、TeamIdしたがって、あなたのSelectedTeamOneプロパティもすべき、typeof演算intで表示されていることを

SelectedTeamOne = db.Teams.Where(o => o.TeamId == fixture.TeamOneId).Select(s => s.TeamId).Single(); 

ノートにコントローラーのコードを変更するというあなたの必要性intでない、string

public int SelectedTeamOne { get; set; } 

また、あなたは単に、

var model = new yourModelName 
{ 
    TeamOneList = new Selectist(db.Teams, "TeamId", "TeamName"), 
    SelectedTeamOne = fixture.TeamOneId // no need to make a database call 
}; 
return View(model); 
+0

"-Please Select- "オプションDDLForの実際の値を表示する方法DDLForで利用可能なオプションを選択してその値を変更するかどうかをユーザーが決めることができます – user3543878

+0

何を意味するのか分かりません。 'fixture.TeamOneId 'が' 5'であれば 'SelectedTeamOne'も5 'になり、' TeamId = 5'で 'Teams'に行がある場合、ビューを生成するときにそのオプションが選択されます。 '実験室elオプションを指定し、 '@ Html.DropDownListFor(model => model.TeamOneId、Model。TeamOneList、新しい{@class = "form-control"}) 'これはラベルオプションを生成しません。 –

+0

しかし、あなたが 'SelectedTeamOne = db.Teams.Where(o => o.TeamId == fixture.TeamOneId).Select(s => s.TeamId).Single();'を持っている理由は本当に明確ではありません。無意味なデータベース呼び出しを行う代わりに 'SelectedTeamOne =' fixture.TeamOneId'を使用してください(そして、私はそのような答えを編集します) –

関連する問題