Asp.net mvc 5 ASP.NET MVC Dropdownlist用于未选择正确的值
我是ASP.NET框架的新手,我已经阅读了基础知识,对框架有了一些理解(理论),但在实践中并不多 我正在努力使用dropdownlistfor助手方法,当我试图以编程方式更改所选项目的值时,它会产生一种奇怪的行为 在我的控制器中,我有一个Index action方法,它接收一个Tshirt类型的参数,在这个action方法中,我将Tshirt对象的属性Color设置为2 在视图(强类型)中,我有一个颜色列表,并将此列表作为ColorViewModel类构造函数的参数传递,该类将负责为我的颜色列表返回SelectListItems 在视图中,我使用model.Color中的值设置了ColorViewModel对象的Selected属性,现在我已经设置了所有属性,以便在调用Asp.net mvc 5 ASP.NET MVC Dropdownlist用于未选择正确的值,asp.net-mvc-5,dropdownlistfor,Asp.net Mvc 5,Dropdownlistfor,我是ASP.NET框架的新手,我已经阅读了基础知识,对框架有了一些理解(理论),但在实践中并不多 我正在努力使用dropdownlistfor助手方法,当我试图以编程方式更改所选项目的值时,它会产生一种奇怪的行为 在我的控制器中,我有一个Index action方法,它接收一个Tshirt类型的参数,在这个action方法中,我将Tshirt对象的属性Color设置为2 在视图(强类型)中,我有一个颜色列表,并将此列表作为ColorViewModel类构造函数的参数传递,该类将负责为我的颜色列表
@Html.DropDownListFor(x => x.Color, cvm.SelectItems, "Select a color")
我将与所选项目一起显示我的下拉列表
当执行请求(GET)时,页面由浏览器呈现,dropdownlist(下拉列表)显示正确的值,该值是使用Index action方法中的值2建立的,下拉列表显示“蓝色”,这是正确的
然后,如果我在dropdownlist中选择一个不同的项目(红色,id为1)并提交表单,则会调用Save action方法,并且我知道模型正在使用model.Color=1到达action方法,这是正确的
然后我决定重定向到传递模型对象的index action方法,index action方法将Color属性更改回2,因此当呈现页面时,它应该在下拉列表中再次显示蓝色值,但没有,它显示红色
如果在Save action方法中注释掉以下行,则会得到不同的行为
//tshirt.Color = 3;
我知道我遵循的这个逻辑从商业逻辑的角度看没有多大意义,我只是试图理解我做错了什么,没有得到预期的结果。
给定以下模型
public class Color
{
public int Id { get; set; }
public string Description { get; set; }
}
我创建以下视图模型
public class ColorViewModel
{
public int Selected { get; set; }
private List<Color> Colors;
public IEnumerable<SelectListItem> SelectItems { get { return new SelectList(this.Colors, "Id", "Description", this.Selected); } }
private ColorViewModel() { }
public ColorViewModel(List<Color> colors)
{
this.Colors = colors;
}
}
最后是我的看法
@{
List<Color> colors = new List<Color>(){
new Color(){Id=1, Description="Red"},
new Color(){Id=2, Description="Blue"},
new Color(){Id=3, Description="Green"}
};
ColorViewModel cvm = new ColorViewModel(colors) { Selected = Model.Color };
}
@using(@Html.BeginForm("Save","Home")){
@Html.DropDownListFor(x => x.Color, cvm.SelectItems, "Select a color")
<input type="submit" />
}
@{
列表颜色=新列表(){
新颜色(){Id=1,Description=“Red”},
新颜色(){Id=2,Description=“Blue”},
新颜色(){Id=3,Description=“Green”}
};
ColorViewModel cvm=新的ColorViewModel(colors){Selected=Model.Color};
}
@使用(@Html.BeginForm(“保存”、“主页”)){
@Html.DropDownListFor(x=>x.Color,cvm.SelectItems,“选择颜色”)
}
我已经上传了完整的代码:,因为当您重定向时,您正在传递更新的模型
return RedirectToAction("Index", tshirt);
是的,更新的模型正在被传递,但一旦在Index action方法中,值被更改为另一个值,dropdownlist不会显示此编程选择的项目,它会显示用户单击的项目。您可以发布您的Tshirt类和其他必要的代码,以便我们可以在我们这边进行尝试吗
return RedirectToAction("Index", tshirt);