2012-10-19 77 views
0

我有問題顯示與Html.DropDownListFor選定的值。我有一個觀點,使用多個下拉菜單,他們都被填充,但沒有被選中。每個下拉菜單都有相同的選擇選項,但選擇的值不同。 這裏是我的視圖模型:DropDownListFor不顯示選定的值

public class ViewPersonTargetingViewModel 
{ 
    public List<PersonTarget> Targets { get; set; } 
    public SelectList TargetStatuses { get; set; } 
} 

這就是我做的SelectList:

var statuses = DataAccess.GetPersonTargetStatuses(); 
TargetStatuses = new SelectList(statuses, "PersonTargetStatusUuid", "PersonTargetStatusName"); 

我PersonTarget類:

public class PersonTarget 
{ 
    public string PersonTargetStatusName { get; set; } 
    public Guid PersonTargetStatusUuid { get; set; } 
    //and more 
} 

這就是我如何創建一個DropDownList:

<%: Html.DropDownListFor(model => model.Targets[k].PersonTargetStatusUuid, Model.TargetStatuses)%> 其中k是通過Targe的迭代列表。

我用同樣的SelectList來填充所有的下拉菜單中,它包含了這樣的信息:

  • 文字:一個值:b2e4a939-06d8-4052-8abf-5c1b2a5e8591
  • 文字:B值: 0b59faaa-514D-4212-93cd-6b0a50b8f151
  • 文本:C值:5575f3cf-33f8-41df-be73-a176a3db5ed5

例如,當我試圖讓它顯示 「B」,我給他正確的目標地位,但它仍然顯示第一個元素(「A」)被選中,我甚至會打印出我給他的值,並且我得到Model.Targets[k].PersonTargetStatusUuid的值爲:0b59faaa-514d-4212-93cd-6b0a50b8f151(它是「B」的Guid),但它仍然顯示「A」。我跑出了想法如何解決這個問題。任何幫助非常感謝,謝謝:)。

回答

0

因此,最後我發現問題出在我的單個列表中。事實證明,出於某種原因,必須從不同的列表中填寫單獨的下拉菜單。現在所有的作品:)

0

您需要設置SelectedValue屬性SelectList。例如像這樣:

<%: Html.DropDownListFor(model => model.Targets[k].PersonTargetStatusUuid, new SelectList(Model.TargetStatuses, "PersonTargetStatusUuid", "PersonTargetStatusName", Model.Targets[k].PersonTargetStatusUuid)) %> 
+0

之前試過,沒有工作。後來我發現DropDownListFor實際上不使用SelectList中的SelectedValue屬性,它只是像普通List一樣使用SelectList。 –

0

我做了一個快速&骯髒的小試程序,它完美地工作。

你在你的問題中提到它,但我會仔細檢查:

  • 您的選擇列表中的HTML具有適當的值&名
  • 你PersonTargetStatusUuid是正確的

控制器:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var colours = new List<CarColour>() { new CarColour() { Id = Guid.NewGuid(), Colour = "Red" }, new CarColour() { Id = Guid.NewGuid(), Colour = "Blue" }, new CarColour() { Id = Guid.NewGuid(), Colour = "Green" } }; 
     ViewData["Colours"] = new SelectList(colours, "Id", "Colour"); 

     var car = new Car() { Id = Guid.NewGuid(), Name = "GreenCar", Colour = colours.First(cc => cc.Colour == "Green") }; 
     return View(car); 
    } 
} 

public class Car 
{ 
    public Guid Id { get; set; } 
    public string Name { get; set; } 
    public CarColour Colour { get; set; } 
} 

public class CarColour 
{ 
    public Guid Id { get; set; } 
    public string Colour { get; set; } 
} 

指數:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<CarTest.Controllers.Car>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Index 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <%: Html.LabelFor(m => m.Id) %> 
    <%: Html.TextBoxFor(m=> m.Id) %> 

    <%: Html.LabelFor(m => m.Name) %> 
    <%: Html.TextBoxFor(m=> m.Name) %> 

    <%: Html.LabelFor(m => m.Colour) %> 
    <%: Html.DropDownListFor(m=> m.Colour.Id, ViewData["Colours"] as IEnumerable<SelectListItem>) %> 

</asp:Content> 
+0

您的示例包含一個下拉列表,當您使用多個下拉列表時,問題開始,並從集合中填充它們全部:) –