0

我在使用 Html.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 是通过目标列表的迭代。

我使用相同的 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”的 Guid),但它仍然显示“A”。我没有办法解决这个问题。非常感谢任何帮助,谢谢:)。

4

3 回答 3

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>
于 2012-10-22T13:33:18.037 回答
0

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

于 2012-11-01T13:43:16.547 回答
0

您需要设置SelectedValue. SelectList例如像这样:

<%: Html.DropDownListFor(model => model.Targets[k].PersonTargetStatusUuid, new SelectList(Model.TargetStatuses, "PersonTargetStatusUuid", "PersonTargetStatusName", Model.Targets[k].PersonTargetStatusUuid)) %>
于 2012-10-22T13:15:46.627 回答