【问题标题】:DropDownListFor not displaying selected valueDropDownListFor 不显示所选值
【发布时间】:2012-10-10 12:53:27
【问题描述】:

我在使用 Html.DropDownListFor 显示选定值时遇到问题。我有一个使用 multiple 下拉菜单的视图,它们都被填充,但没有被选中。我对每个下拉菜单都有相同的选择,但选择的值不同。 这是我的视图模型:

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 的方式:

&lt;%: Html.DropDownListFor(model =&gt; model.Targets[k].PersonTargetStatusUuid, Model.TargetStatuses)%&gt; 其中 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”。我没有办法解决这个问题。非常感谢任何帮助,谢谢:)。

【问题讨论】:

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


    【解决方案1】:

    您需要设置SelectListSelectedValue 属性。比如这样:

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

    【讨论】:

    • 以前试过这个,没用。后来发现DropDownListFor其实并没有使用SelectList中的SelectedValue属性,它只是像普通List一样使用SelectList。
    【解决方案2】:

    我做了一个又快又脏的小试验程序,效果很好。

    您在问题中提到了它,但我会仔细检查:

    • 您的选择列表的 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>
    

    【讨论】:

    • 您的示例包含一个下拉列表,当您使用多个下拉列表时会出现问题,并使用 from collection 填充它们:)
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多