我正在尝试使用Html.DropDownListFor
创建DropDownList。 DropDownList已创建,但我想要选择的值不会被选中。
这是我的代码:
@Html.DropDownListFor(model => model.Nature, new SelectList(TopicNatureHelper.All(), "Key", "Value", 2)
这是TopicNatureHelper.All()
:
public static class TopicNatureHelper
{
public static Dictionary<int, string> All()
{
var result = new Dictionary<int, string>();
foreach (TopicNature topicNature in (TopicNature[]) Enum.GetValues(typeof(TopicNature)))
{
result.Add((int)topicNature, TopicNatureHelper.GetLocalizedDescription(topicNature));
}
return result;
}
}
public enum TopicNature
{
[Description("Owe")]
Owe = 1,
[Description("Due")]
Due = 2,
[Description("Both")]
Both = 4
}
正如我所说,唯一的问题是没有设置Selected值。 什么是错误的线索?
我调试了代码,我得到了这些令人惊讶的结果:
当我处于调试模式时,在监视窗口中,表达式
new SelectList(TopicNatureHelper.All(), "Key", "Value", 2)
创建System.Web.Mvc.SelectList
,项目(值为2)有Selected=true
,因此我认为Html.DropDownListFor
无法呈现正确的输出。
要查看Html.DropDownListFor
的结果,我就这样做了:
@{ var dropDown = Html.DropDownListFor(model => model.Nature, new SelectList(TopicNatureHelper.All(), "Key", "Value", 2));}
@dropDown
检查dropDown
给了我这个:
// base => Non-public Members => _htmlString
<select class="form-control" data-val="true" data-val-required="this is required" id="Nature" name="Nature">
<option value="1">Owe</option>
<option value="2">Due</option>
<option value="4">Both</option>
</select>
所以,我认为问题出在Html.DropDownListFor
。我完全糊涂了。
答案 0 :(得分:0)
以下列方式对我来说很好。我只删除了TopicNatureHelper.GetLocalizedDescription()方法,因为你从未粘贴它的实现,然后我创建了自己的Model - MyModel,其属性为TopicNature。我能够成功预先选择价值。
public static class TopicNatureHelper
{
public static Dictionary<int, string> All()
{
var result = new Dictionary<int, string>();
foreach (TopicNature topicNature in (TopicNature[])Enum.GetValues(typeof(TopicNature)))
{
result.Add((int)topicNature, topicNature.ToString());
// I removed TopicNatureHelper.GetLocalizedDescription() method, as I dont have it's implementation
}
return result;
}
}
public enum TopicNature
{
[Description("Owe")]
Owe = 1,
[Description("Due")]
Due = 2,
[Description("Both")]
Both = 4
}
然后我创建了我的模型 -
public class MyModel
{
public TopicNature Nature { get; set; }
}
然后这是我的简单动作方法,它使用DropDownListFor-
返回视图public ActionResult IndexNew()
{
return View();
}
这是我的观点 -
@using RamiSamples.Controllers
@model RamiSamples.Controllers.MyModel
@{
ViewBag.Title = "IndexNew";
}
<h2>IndexNew</h2>
@Html.DropDownListFor(model => model.Nature, new SelectList(TopicNatureHelper.All(), "Key", "Value", 4))
当我运行页面时,我得到以下输出 -