DropDownListFor不显示选定的值

时间:2012-10-19 20:45:06

标签: c# c#-4.0 asp.net-mvc-2 html-helper

我在使用Html.DropDownListFor显示所选值时遇到问题。我有一个使用多个下拉菜单的视图,所有这些都会被填充,但没有任何内容被选中。我对每个下拉列表都有相同的选择选项,但选择的值不同。 这是我的viewmodel:

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是通过目标列表的迭代。

我使用相同的SelectList填充所有DropDowns,它包含如下信息:

  • 文字:A价值: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”的指南),但它仍显示“A”。我没有想法如何解决这个问题。非常感谢任何帮助,谢谢:)。

3 个答案:

答案 0 :(得分:0)

您需要设置SelectedValue SelectList属性。例如:

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

答案 1 :(得分:0)

我做了一个快速的&amp;肮脏的小试用程序,它工作得很好。

你在问题​​中提到过,但我会仔细检查:

  • 您的选择列表的HTML具有适当的值&amp;名称
  • 您的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>

答案 2 :(得分:0)

所以最后我发现问题出现在我的单一列表中。事实证明,出于某种原因,必须从不同的列表填写个人下拉列表。这一切现在都有效:)