2012-10-19 41 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

您的示例包含一个下拉列表,当您使用多个下拉列表时,问题开始,并从集合中填充它们全部:) –