私はMVCを初めて使用しています。TextBoxとDropDownListフィールドを使用して小さな製品フォームを作成しようとしています。モデルにpersonName、productNameのクラスを作成しました。製品が 5 つしかないので、db を使用したくありません。
Google でできる限りのことを試しましたが、ドロップダウン リストを取得できませんでした
ありがとう
私はMVCを初めて使用しています。TextBoxとDropDownListフィールドを使用して小さな製品フォームを作成しようとしています。モデルにpersonName、productNameのクラスを作成しました。製品が 5 つしかないので、db を使用したくありません。
Google でできる限りのことを試しましたが、ドロップダウン リストを取得できませんでした
ありがとう
PersonsProduct
このようなモデル/ビューモデルを表すクラスがあると仮定します
public class PersonsProduct
{
public string PersonName { set;get;}
public IEnumerable<SelectListItem> Products { get; set; }
public string SelectedProductId { get; set; }
//Other Properties
}
GET
アクションメソッドでは、次のように値を初期化できます
public ActionResult AddProduct()
{
var objProduct = new PersonsProduct();
objProduct.Products = new[]
{
new SelectListItem { Value = "1", Text = "Book" },
new SelectListItem { Value = "2", Text = "Pen" },
new SelectListItem { Value = "3", Text = "Computer" },
new SelectListItem { Value = "4", Text = "Table" },
new SelectListItem { Value = "5", Text = "Mouse" }
};
// can replace the above line with loading data from Data access layer.
return View(objProduct);
}
そして、ビューモデルに強く型付けされたビューPersonsProduct
で
@model PersonsProduct
@using (Html.BeginForm())
{
@Html.DropDownListFor(x => x.SelectedProductId, new SelectList(Model.Products ,"Value","Text"), "Select..")
<input type="submit" value="save" />
}
そしてあなたのHTTPPost
アクションでは、このように選択したproductIdを取得できます
[HttpPost]
public ActionResult Index(PersonsProduct model)
{
// check model.SelectedProductId here
}
これはあなたの質問に答えます (データベースと XML を使用せずに)。ただし、このハードコーディングのアプローチは避けることを強くお勧めします。データベースや XML ファイルなど、製品のリストには別のソースを使用することをお勧めします。そうしないと、リストに新しい製品を追加するたびに、再コンパイルが必要になります。このコードを変更して、ハード コードされた値ではなく、別のソースから製品データを読み取るようにしてください。
データベースを使用したくない場合は、すべての製品情報を格納する XML ドキュメントを作成できます。
次に、XML パーサーを使用して XML ドキュメントからすべての値を取得するモデルを作成できます。
モデルに値を取得したら、それを にバインドできますDropDownListFor<Model>
。
製品が変更されない場合は、製品を DropDownList にハードコードすることもできます。