如何在MVC中正确设置Dropdownlist Selected Value

时间:2014-01-08 09:29:51

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我目前正在向MVC4中的Controller发布List<MyModel>

我可以正确更新我发布的所有模型,但是当页面加载时,我无法在下拉列表中选择正确的值。

如果我使用文本框,这可以正常工作,但是下拉列表不会选择正确的值。页面加载时正确填充列表。

我在视图中使用了 for 循环,因此我可以将我的列表发布到控制器。

文本框的ID为[0] .PurgeSeconds。当我用具有相同ID的下拉列表替换它时,它就不起作用。

如何将下拉列表设置为正确的选定值?

模型

namespace MyMvc.Models
{
    [Table("MyTable")]
    public class DataRetentionConfig
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public string Name { get; set; }
        public int PurgeSeconds { get; set; }
    }
}

控制器

[HttpPost]
public ActionResult Save(ICollection<DataRetentionConfig> models)
{
    foreach (var model in models)
    {
        using (var db = new FoySqlContext())
        {
            var retentionRecord = db.DataRetentionConfigs.Find(model.Id);
            retentionRecord.PurgeTime = model.PurgeTime;
            db.SaveChanges();
        }
    }

    return RedirectToAction("Index");
}

查看

@model List<MyMvc.Models.DataRetentionConfig>
@{
    ViewBag.Title = "Index";
}
@using (Html.BeginForm("Save", "Retention", FormMethod.Post))
{
    <table class="table table-striped">
        <thead>
            <tr>
                <th>Name</th>
                <th>Purge Seconds</th>
            </tr>
        </thead>
        <tbody>
            @for (var i = 0; i < Model.Count; i++)
            {
                if (Model[i].DataType == 1)
                {
                    <tr>
                        <td>
                            @Html.HiddenFor(m => m[i].Id)
                            @Model[i].Name
                        </td>
                        <td>
                            @*@Html.TextBoxFor(m => m[i].PurgeSeconds)*@
                            @Html.DropDownListFor(m => m.[i].PurgeSeconds, new MyMvc.Models.Configuration.DataRetentionConfig().PurgeTimeOptions(), new { @name = Model[i].PurgeTime, @class = "form-control", @style = "width: 150px;" })
                        </td>
                    </tr>
                }
            }
        </tbody>
    </table>
    <p>
        <input type="submit" value="Save" class="btn btn-large btn-primary" />
        @*<button type="reset" class="btn">Cancel</button>*@
        <a class="btn" href="@Url.Action("Index", "Retention")">Cancel</a>
    </p>
}

1 个答案:

答案 0 :(得分:2)

尝试

@Html.DropDownListFor(m => m.[i].PurgeSeconds, new SelectList(YOUR_LIST, "PurgeSeconds", "Name", m.[i].PurgeSeconds), new { @name = Model[i].PurgeTime, @class = "form-control", @style = "width: 150px;" })

YOUR_LIST是列表,您可以在下拉列表中显示项目(可能是MyMvc.Models.Configuration.DataRetentionConfig()。PurgeTimeOptions(),我不知道)。 最好使用ViewModel,您可以在其中存储YOUR_LIST和其他数据以进行显示和编辑。