1

私はMVCを初めて使用しています。TextBoxとDropDownListフィールドを使用して小さな製品フォームを作成しようとしています。モデルにpersonName、productNameのクラスを作成しました。製品が 5 つしかないので、db を使用したくありません。

Google でできる限りのことを試しましたが、ドロップダウン リストを取得できませんでした

ありがとう

4

2 に答える 2

1

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 ファイルなど、製品のリストには別のソースを使用することをお勧めします。そうしないと、リストに新しい製品を追加するたびに、再コンパイルが必要になります。このコードを変更して、ハード コードされた値ではなく、別のソースから製品データを読み取るようにしてください。

于 2012-06-23T14:01:13.230 に答える
1

データベースを使用したくない場合は、すべての製品情報を格納する XML ドキュメントを作成できます。

次に、XML パーサーを使用して XML ドキュメントからすべての値を取得するモデルを作成できます。

モデルに値を取得したら、それを にバインドできますDropDownListFor<Model>

製品が変更されない場合は、製品を DropDownList にハードコードすることもできます。

于 2012-06-23T13:40:13.883 に答える