Razor上的编辑下拉保留值

时间:2016-07-29 07:48:41

标签: asp.net-mvc asp.net-mvc-4 razor

想要减少我的逻辑视图数据从下拉列表不会来自数据库。 当前代码

@Html.DropDownListFor(m => m.MyViewModel.Value,
                                new List<SelectListItem> {
                                new SelectListItem { Text = "1",Value = "1" },
                                new SelectListItem { Text = "2", Value = "2" },
                                new SelectListItem { Text = "3", Value = "3" },
                                new SelectListItem { Text = "4", Value = "4" },
                                new SelectListItem { Text = "5", Value = "5" },         
                             });

尝试实现

 <select id="MyViewModel.name" name="MyViewModel.name">
                            <option value="">--Select--</option>
                            @for (int i = 1; i <= 5; i++)
                            {
                                <option value="@i">@i</option>
                            }
                        </select>

在提交表单时,我在我的ViewModel中获取所选值,即操作但是在编辑时不是所选的值Like

<select data-val="true" id="ddl" name="">
<option value="1">1</option>
<option value="2">2</option>
**<option selected="selected" value="3">3</option>**
<option value="4">4</option>
<option value="5">5</option>
</select>

2 个答案:

答案 0 :(得分:1)

您生成SelectList的代码可以简化为

@Html.DropDownListFor(m => m.yourProperty, new SelectList(new List<int> { 1, 2, 3, 4, 5 }))

但是,该代码属于控制器,而不属于视图,理想情况下,您应该拥有属性为IEnumerable<SelectListItem>的视图模型,例如

public class MyViewModel
{
    [Required(ErrorMessage = "...."]
    [Display(Name = "....")]
    public int? SelectedItem { get; set; } // nullable to protect against under-posting attacks
    public IEnumerable<SelectListItem> Options { get; set; }
    ....
}

和GET方法

MyViewModel model = new MyViewModel
{
    Options = new SelectList(new List<int> { 1, 2, 3, 4, 5 })
};
return View(model);

并在视图中

Html.DropDownListFor(m => m.SelectedItem, Model.Options, "Please select")

答案 1 :(得分:0)

最好在控制级别定义数据,而不是Razor

所以创建和编辑动作将返回一个将在DropDownListFor

中使用的列表

但编辑也会设置所选值

相关问题