9

ここから読む:ASP.NET MVC

コントローラ内にアクションSelectCategoryが作成されました-

 public ActionResult SelectCategory() {

     List<SelectListItem> items = new List<SelectListItem>();    
     items.Add(new SelectListItem { Text = "Action", Value = "0"});    
     items.Add(new SelectListItem { Text = "Drama", Value = "1" });    
     items.Add(new SelectListItem { Text = "Comedy", Value = "2", Selected = true });    

     ViewBag.MovieType = items;

     return View();    
 }

次の行のデータのバインドを理解できません。

@Html.DropDownList("MovieType")

同様の方法でデータをバインドしている間、

@Html.DropDownList("IdList");

次のエラーが発生します-

キー「IdList」を持つタイプ「IEnumerable」のViewDataアイテムはありません。

コントローラのアクション

public ActionResult SelectId()
    {
        List<SelectListItem> items = new List<SelectListItem>();
        items.Add(new SelectListItem { Text = "MyId1", Value = "MyId1", Selected=true });
        items.Add(new SelectListItem { Text = "MyId2", Value = "MyId2" });

        ViewBag.IdList = items;
        return View();
    }

私は何が欠けていますか?ご協力ありがとうございました !

4

3 に答える 3

22

ViewBag.MovieType=>を設定する@Html.DropDownList("MovieType")と、ドロップダウンを使用するとこの値が使用されます。を記述する@Html.DropDownList("IdList")と、ヘルパーはIdListViewBag で対応するプロパティを見つけられず、データをバインドする場所がわからないため、エラーをスローします。

または、ドロップダウンの名前を変更する場合は、次を使用できます。

@Html.DropDownList("SelectedMovieType", (IEnumerable<SelectListItem>)ViewBag.MovieType)

POST アクションにはSelectedMovieType、選択した値を取得するためのパラメーターがあります。

しかし、ViewBag は避けます。ビュー モデルを定義する方が優れています。

public class MyViewModel
{
    public string SelectedMovieType { get; set; }
    public IEnumerable<SelectListItem> MovieTypes { get; set; }
}

次に、コントローラー アクションでこのビュー モデルにデータを入力し、ビューに渡します。

public ActionResult SelectId()
{
    List<SelectListItem> items = new List<SelectListItem>();
    items.Add(new SelectListItem { Text = "MyId1", Value = "MyId1", Selected=true });
    items.Add(new SelectListItem { Text = "MyId2", Value = "MyId2" });

    var model = new MyViewModel
    {
        MovieTypes = items    
    };

    return View(model);
}

そして、強く型付けされたビューで:

@model MyViewModel
@Html.DropDownListFor(x => x.SelectedMovieType, Model.MovieTypes)
于 2012-10-20T07:09:56.873 に答える
3

リストを DropDown にバインドするときに、モデルで強く型付けされていない @Html.DropDown コントロールを使用するため、IEnumerable に型キャストする必要があります。

ビューで

@Html.DropDownList("MovieType",(IEnumerable<SelectListItem>)ViewBag.MovieType) 

別の方法で IdList をバインドすると、

@Html.DropDownList("IdList",(IEnumerable<SelectListItem>)ViewBag.IdList)
于 2012-10-20T06:35:37.203 に答える
1

データ バインディングがデータをモデルにバインドする簡単な方法:ドロップダウンにカミソリを使用しないでください。手動でバインドし、FormCollection オブジェクトで取得します。

コントローラ:

 [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Sorun sorun,FormCollection fc)
    {
        //Define independently as form collection

        sorun.GonderilecekBirim = fc["GonderilecekBirim"];
        sorun.IlkSorulmaTarihi = DateTime.Now;
        if (ModelState.IsValid)
        {

            db.Soruns.Add(sorun);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(sorun);
    }

意見

@Html.LabelFor(model => model.GonderilecekBirim, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            <!-- Define as raw html -->
            <select id="GonderilecekBirim" name="GonderilecekBirim">
                <option value="4">Satın Alma</option>
                <option value="5">Muhasebe</option>
            </select>

            @*@Html.ValidationMessageFor(model => model.GonderilecekBirim, "", new { @class = "text-danger" })*@
        </div>
于 2016-07-27T12:02:24.397 に答える