2016-11-04 60 views
0

我有一個名爲Region一個簡單的模型,它像有上加載模型問題,以HTML DropDownListFor助手

namespace App 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class Region 
    { 
     public int RegionID { get; set; } 
     public string RegionDescription { get; set; } 
    } 
} 

,我試圖給模型加載到HTML DropDownListFor()幫手鑑於像

@model IEnumerable<App.Region> 

<div class="row"> 
    @Html.DropDownListFor("RegionList", 
        new SelectList(model => model.RegionDescription), 
        "Select Region", 
        new { @class = "form-control" }) 

</div> 

@model IEnumerable<App.Region> 
<div class="row"> 
    @Html.DropDownListFor("RegionList", 
         new SelectList(s => s.RegionDescription), 
         "Select Region", 
         new { @class = "form-control" }) 

</div> 

或:

@model IEnumerable<App.Region> 
<div class="row"> 
@foreach (var item in Model) 
{ 
    @Html.DropDownListFor("RegionList", 
         new SelectList(model => item.RegionDescription), 
         "Select Region", 
         new { @class = "form-control" }) 
} 
</div> 

但在兩種方式中,我得到這個錯誤。

無法轉換lambda表達式鍵入「對象」,因爲它不是一個 委託類型

能否請您讓我知道爲什麼發生這種情況,我該如何解決?

+0

'SelectList'構造函數確實需要一個集合。不是拉姆達表達。你從哪裏得到這些信息? – Shyju

+0

嗨感謝您的評論Shyju,我正在關注這個'Link'(http://www.tutorialsteacher.com/mvc/htmlhelper-dropdownlist-dropdownlistfor) –

+0

您提供的鏈接沒有任何代碼,比如你在你的問題中有什麼! – Shyju

回答

1

SelectList構造函數將集合作爲第一個參數。不是lamda表達!您正在以不正確的方式使用幫助器方法!

理想情況下,Html.DropDownListFor方法的第一個參數是一個表達式,幫助者可以從該表達式獲取視圖模型屬性的值。這意味着,要使用它,您的視圖模型應該有一個屬性來存儲選定的選項值。因此,在您的GET操作創建一個這樣

public class CreateVm 
{ 
    public int SelectedRegion { set;get;} 
    public List<SelectListItem> Regions { set;get;} 
} 

視圖模型現在,你需要創建這個視圖模型的對象,加載地區集合屬性,併發送至視圖

public ActionResult Create() 
{ 
    var vm = new CreateVm(); 
    vm.Regions = new List<SelectListItem>{ 
     new SelectListItem { Value="1", Text="Region1"}, 
     new SelectListItem { Value="2", Text="Region2"}, 
     new SelectListItem { Value="3", Text="Region3"} 
    }; 
    return View(vm); 
} 

和在你看來這是強類型的這種新的視圖模型,你可以使用DropDownListFor輔助方法,這樣

@model CreateVm 
@Html.DropDownListFor(x=>x.SelectedRegion,Model.Regions,"Select Region", 
                  new { @class = "form-control" }) 

或者,如果你想使用現有的視圖模型/類型傳遞給視圖,您可以考慮使用Html.DropDownList輔助方法來呈現一個SELECT元素

@Html.DropDownList("SelectedRegion", 
        new SelectList(Model, "RegionID", "RegionDescription"), "Select Region", 
        new { @class = "form-control" }) 

,這會使得一個SELECT元素的名稱"SelectedRegion"

+0

謝謝Shyju,你最後一部分代碼是做我在找的東西,但我不明白你爲什麼要傳遞3個參數'Model ,「RegionID」,「SelectList」中的「RegionDescription」? –

+0

這裏的模型是您的自定義類「Region」的列表。您需要告訴SelectList使用選項值的「RegionId」屬性值和「RegionDescription」屬性選項文本的值 – Shyju