Html.DropDownListFor未设置选定的值

时间:2014-09-21 09:02:20

标签: asp.net-mvc razor

我正在尝试使用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。我完全糊涂了。

1 个答案:

答案 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))

当我运行页面时,我得到以下输出 -

enter image description here