我目前正在向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>
}
答案 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和其他数据以进行显示和编辑。