MVC Webアプリケーションを構築していて、壁に頭を抱えようとしています。これについてはすでに十数のトピックがあり、私にとってはうまくいきません。おそらく、私は忘れている/見ていない、実際には愚かでシンプルなものがありますが、それをうまくいくようには見えません。 名前を付けて私を憎んではいけません。私は他の誰かによって開始されたプロジェクトを続けています。これは整数であるプロパティModel.ChecklistWaarde.SoortID、に基づいて選択ボックスを作成しますDropDownListFor値をあらかじめ選択していない
@Html.DropDownListFor(m => m.ChecklistWaarde.SoortID, Model.ChecklistOptionsOptions, "Choose a value", new { @class = "form-control" })
:
は、私は私のManageDetail.cshtmlに次の行を持っています。渡された次のパラメータは、モデルからのSelectListであり、2番目のデータベース(不幸にも)でDBルックアップを行う次の非常に簡単なヘルパ関数によって生成され、事前選択値を設定するためにパラメータSoortIDも受け取る。public SelectList GetChecklistOptions(int selectedId = -1)
{
var soorten = new List<SelectListItem>();
try
{
using (var connection = new SqlConnection(mssqlConnectionString))
{
connection.Open();
SqlCommand command = connection.CreateCommand();
command.CommandText = "Select Naam, ID From ChecklistSoorten";
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
var id = reader["ID"] as int?;
if (id.HasValue)
{
soorten.Add(new SelectListItem { Text = reader["Naam"] as string, Value = id.Value.ToString(), Selected = id.Value.Equals(selectedId) });
}
}
}
}
catch (Exception ex)
{
Globals.Log.Error(ex);
}
return new SelectList(soorten, "Value", "Text");
}
それは、このようなコントローラで呼び出されます:
public ActionResult ManageDetail(int? id) {
var model = new MachineDetailsModel(id);
model.ChecklistOptionsOptions = sqlDal.GetChecklistOptions(model.ChecklistWaarde.SoortID);
return View("ManageDetail", model);
}
私は自分のコードをデバッグしようとすると、私はモデルの値が正しく装着されていることがわかります。
SoortID
はModel.ChecklistOptionsOptions
私が「2」プロパティSelected = true
を有する値を持つ項目のみが、これは他のすべてのためにfalse
であることが判明SelectList
を検査すると人口SelectLis
トン- を有する(
int
)2の値を有します。 - フォームがレンダリングされると、値2のアイテムは選択されません。最初のアイテムが選択されます。「値を選択してください」
- HTMLを検査すると、値2のアイテムが実際に表示されます私が期待していたことに反して、選択されていませんでした(下記のHTMLを参照してください。私は
SelectList
で選択されたので、項目2の行に「選択された」と表示されると予想しました。
<select class="form-control" data-val="true" data-val-number="The field SoortID must be a number." data-val-required="The SoortID field is required." id="ChecklistWaarde_SoortID" name="ChecklistWaarde.SoortID" style="min-width:100%;">
<option value="">Choose a value</option>
\t \t <option value="1">Item A</option>
\t \t <option value="2">Item B</option>
\t \t <option value="3">Item C</option>
\t \t <option value="4">Item D</option>
\t </select>
私は何をしないのですか? DropDownListFor()
機能に渡すSelectList
にあるように、値「2」のアイテムを選択するにはどうすればよいですか?
if (id.HasValue)
{
soorten.Add(new SelectListItem
{
Text = reader["Naam"] as string,
Value = id.Value.ToString()
});
}
、その後SelectList
をインスタンス化のラインでダウン:あなたがそこSelectList
、セット選択した値を移入されている場合、あなたのコードは次のようになりコントローラで
モデルをビューに渡す前に、GETメソッドでプロパティ「SoortID」の値を設定する必要があります。また、 'SelectListItem'の' Selected'プロパティを設定するのは無意味です(モデルプロパティへのバインド時に無視されます)。さらに、 'new SelectList(...) 'を使って最初のものから別の' SelectList'を作成しています - 'return soorten;'を使用してください –
@StephenMuecke SoortIDはモデルのコンストラクタで設定されているので景色。 新しいSelectListの代わりにsoortenリストを渡すだけの良い提案は、それを変更します。 –
'SoortID'の値があなたのオプションの1つにマッチすれば、それはビューで選択されます。そうでなければ、あなたに私たちに言っていないことがあります。 –