我正在尝试从我的mvc视图中的下拉列表中获取所选项目的索引。我使用枚举填充了ddl的内容,代码如下所示:
@Html.DropDownListFor(x => x.SelectedStateId, Enum.GetNames(typeof(BTSWeb.Models.States)).Select(e => new SelectListItem { Text = e }),"--Market--",new { style = "width: 80px;font-size:85%;border-radius: 6.5px 6.5px 6.5px 6.5px"})
这样你们就知道我的模型类中定义了枚举:
public enum States { ANY, FL, TX, GA, NE };
我的控制器如下所示:
public ActionResult Index()
{
Debug.WriteLine("hello");
var model = new DropDownModel();
return View(model);
}
[HttpPost]
public ActionResult Index(DropDownModel model)
{
// Get the selected value
int stateId = model.SelectedStateId;
int paymentTypeId = model.SelectedBillTypeId;
BillingToolInterface_1.check.a = stateId;
BillingToolInterface_1.check.b = paymentTypeId;
//System.Diagnostics.Debug.WriteLine("hello");
Debug.WriteLine(stateId.ToString());
return View();
}
public ActionResult About()
{
return View();
}
按下视图中的提交按钮后,我在调试控制台上打印selectedstateid的值。但它为每个选定的值显示“0”。它应显示1,2,3,依此类推,同时在我的状态下拉列表中选择相应的值。
PS:ddl - >下拉列表
答案 0 :(得分:1)
问题在于,当您创建选择列表时,您只需指定文本值。
@Html.DropDownListFor(x => x.SelectedStateId, Enum.GetNames(typeof(BTSWeb.Models.States)).Select(e => new SelectListItem { Text = e }),"--Market--",new { style = "width: 80px;font-size:85%;border-radius: 6.5px 6.5px 6.5px 6.5px"})
当您在浏览器中运行此类代码时,您会看到:
修改代码时如下:
@Html.DropDownListFor(x => x.States, Enum.GetNames(typeof(WebApplication1.Controllers.States)).Select(e => new SelectListItem { Text = e, Value = ((int)Enum.Parse(typeof(WebApplication1.Controllers.States), e)).ToString() }), "--Market--", new { style = "width: 80px;font-size:85%;border-radius: 6.5px 6.5px 6.5px 6.5px" })
现在,您还传递了枚举值:
您会注意到选择列表的呈现HTML如何变化?你现在有一个价值物业。
我已经编写了一个解释它的演示项目(我尽可能保持与您的代码尽可能接近)。
首先是枚举:
public enum States { ANY, FL, TX, GA, NE };
然后是模型:
public class DropDownModel
{
public States States = new States();
public int SelectedStateID { get; set; }
}
控制器:
public class DefaultController : Controller
{
public ActionResult Index()
{
var model = new DropDownModel();
return View(model);
}
[HttpPost]
public ActionResult Index(DropDownModel model)
{
// Get the selected value
return View();
}
}
现在有了观点:
@using (Html.BeginForm("Index", "Default", FormMethod.Post))
{
@Html.DropDownListFor(x => x.SelectedStateID, Enum.GetNames(typeof(WebApplication1.Controllers.States)).Select(e => new SelectListItem { Text = e, Value = ((int)Enum.Parse(typeof(WebApplication1.Controllers.States), e)).ToString() }), "--Market--", new { style = "width: 80px;font-size:85%;border-radius: 6.5px 6.5px 6.5px 6.5px" })
<input type="submit" name="SaveButton" value="Save" />
}
基本上,他们都是。 现在,运行您的应用程序,并在下拉列表中选择第3个元素(这应该是&#39; TX&#39;)。
当您再次查看传递给控制器的模型属性时,您将无法获得以下信息:
您会看到States具有INCORRECT值,但所选索引属性为2.这是正确的,因为以下内容:
在你的下拉列表的声明中,你将它绑定到SelectedStateId。
2的值也是正确的,因为没有值的枚举从第一个元素的0开始,并为每个后续元素添加1。
现在需要状态时,可以将整数值(2)转换为枚举值。
所以,很长的帖子,但我希望它有所帮助。