我在使用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,它包含如下信息:
例如,当我试图让它显示“B”时,我给他正确的目标状态,但它仍然显示第一个元素(“A”)为选中,我甚至打印出我给出的值他,我得到Model.Targets[k].PersonTargetStatusUuid
的值为:0b59faaa-514d-4212-93cd-6b0a50b8f151(这是“B”的指南),但它仍显示“A”。我没有想法如何解决这个问题。非常感谢任何帮助,谢谢:)。
答案 0 :(得分:0)
您需要设置SelectedValue
SelectList
属性。例如:
<%: Html.DropDownListFor(model => model.Targets[k].PersonTargetStatusUuid, new SelectList(Model.TargetStatuses, "PersonTargetStatusUuid", "PersonTargetStatusName", Model.Targets[k].PersonTargetStatusUuid)) %>
答案 1 :(得分:0)
我做了一个快速的&amp;肮脏的小试用程序,它工作得很好。
你在问题中提到过,但我会仔细检查:
控制器:
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)
所以最后我发现问题出现在我的单一列表中。事实证明,出于某种原因,必须从不同的列表填写个人下拉列表。这一切现在都有效:)