C# MVC3-无法在DropDownList for中选择项
我正在尝试学习MVC3,在我正在做的一个练习中,我定义了一个DropDownList,如下所示:C# MVC3-无法在DropDownList for中选择项,c#,asp.net,asp.net-mvc,asp.net-mvc-3,html.dropdownlistfor,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Html.dropdownlistfor,我正在尝试学习MVC3,在我正在做的一个练习中,我定义了一个DropDownList,如下所示: @Html.DropDownListFor(m => m.Animal, new System.Web.Mvc.SelectList(Model.AvailableValues, "Value", "Text", Model.Animal)) 其中,模型动物为动物型: public enum AnimalEnum { Cat, Dog, Fox, Aardva
@Html.DropDownListFor(m => m.Animal,
new System.Web.Mvc.SelectList(Model.AvailableValues, "Value",
"Text", Model.Animal))
其中,模型动物为动物型:
public enum AnimalEnum
{
Cat,
Dog,
Fox,
Aardvark
}
可用价值定义为:
var model = definition.Settings.GetModel<AnimalTypePart>();
model.AvailableValues = Enum.GetValues(typeof (AnimalEnum))
.Cast<int>()
.Select(i =>
new {
Text = Enum.GetName(typeof (AnimalEnum), i),
Value = i
});
我的问题是,我能够正确保存我在下拉列表上选择的值,但当我再次显示下拉列表时,它不会显示保存的值,而是始终显示列表中的第一个值。我还尝试将intModel.Animal作为DropDownListFor的最后一个参数,该参数对应于与每个选项关联的整数值,但它也不起作用。调试我可以在调用帮助程序时确认DropDownListFor的所有参数都具有正确的值。
当我可视化页面时,您能帮助我让dropdownlist自动显示保存的值吗?您必须在所选参数中将索引作为值传递,因为您正在使用枚举项的索引作为选择中的值:
var model = definition.Settings.GetModel<AnimalTypePart>();
model.AvailableValues = Enum.GetValues(typeof (AnimalEnum))
.Cast<int>()
.Select(i =>
new {
Text = Enum.GetName(typeof (AnimalEnum), i),
Value = i,
Selected = i == (int)model.Animal
});
另外,DropDownListFor的最后一个参数是htmlAttributes,您正在传递Model.Animal,将其删除。您需要定义一个属性,该属性将在模型中保存选定的值 此属性还需要存在于可在可用选项中选择的值列表中 这样,如果在模型中设置了选定值,则模型将自动重新绑定到选定值,并在post中保留选定值 下面是一个如何做到这一点的示例 模型 在“获取”中,将填充可用选项的列表,并将SelectedAnimalId设置为列表中的第二个选项。请注意工作示例中的重新绑定 post只是简单地传递模型,并显示视图中已选择的项目 看法
上面只是将SelectedAnimalId设置为第一个参数,然后使用绑定列表作为选项。不幸的是,它不起作用。AvailableValues是一个IEnumerable,因此通过您的代码,我获得了一个列表,其中每个元素本身都有selected属性。和Model.Animal是SelectList的最后一个参数,而不是DropDownListFor的最后一个参数:
public class MyViewModel
{
public string SelectedAnimalId { get; set; }
public IEnumerable<SelectListItem> AvailableValues { get; set; }
}
[HttpGet]
public ActionResult Index()
{
var model = new MyViewModel();
model.AvailableValues = PopulatedDropDown;
model.SelectedAnimalId = "1";
return View(model);
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
// Save it to db and rebind the selected
model.AvailableValues = PopulatedDropDown;
return View(model);
}
// helper property to populate from the enum
private IEnumerable<SelectListItem> PopulatedDropDown
{
get {
var enumList = Enum.GetValues(typeof (AnimalEnum))
.Cast<int>()
.Select(i =>
new SelectListItem {
Text = Enum.GetName(typeof (AnimalEnum), i),
Value = i.ToString()
});
return enumList;
}
}
@using (Html.BeginForm())
{
@Html.DropDownListFor(m => m.SelectedAnimalId,
Model.AvailableValues)
<input type="submit" class="btn btn-primary" value="Submit" />
}
Selected Item:
@Model.SelectedAnimalId