ASP.NET MVC3:下拉列表中默认值的选择

3

我有一个名为“Program”的模型。每个节目都将拥有以下描述的播出时间表。

enum SchduleEnum { Daily = 0, Weekly, Monthly };

每个程序都可以有一个类别,比如“新闻”、“电影”、“讨论”。
在节目调度视图中,用户必须能够从下拉菜单中选择日程表。但是,在日程下拉菜单中应该有默认值。规则是,如果是“新闻”类别,则默认日程表应为“每日”。如果类别是“电影”,则默认日程表应为“每周”。如果类别是“讨论”,则默认日程表应为“每月”。
我有以下代码,它显示空白作为日程下拉菜单的默认值。我们如何修改代码以根据上述规则显示所需的默认值?
基于MVC原则:UI逻辑属于视图,输入逻辑属于控制器,业务逻辑属于模型。
  1. 我们如何快速实现它?

  2. 我们如何按照上述MVC原则标准方式实现它?

代码:
public class Program
{
    public int ProgramID { get; set; }
    public string ProgramName { get; set; }
    public int ScheduleID { get; set; }
    public string ProgramCategory { get; set; }
}

控制器

namespace MyDefaultValueTEST.Controllers
{
public class MyProgramController : Controller
{
    enum SchduleEnum { Daily = 0, Weekly, Monthly };
    List<Program> programList = new List<Program>()
                          {
                            new Program
                            {
                                ProgramID = 1,ProgramName = "Program1",
                                ProgramCategory = "News"
                            },
                            new Program
                            {
                                ProgramID = 2,ProgramName = "Program2",
                                ProgramCategory = "Movie"
                            },
                            new Program
                            {
                                ProgramID = 3,ProgramName = "Program3",
                                ProgramCategory = "Discussion"
                            }

                          };



    public ActionResult ScheduleProgram()
    {
        ViewBag.ScheudleEnum = GetSchduleSelectList();
        return View(programList);
    }

    public static SelectList GetSchduleSelectList()
    {
        Array values = Enum.GetValues(typeof(SchduleEnum));
        List<System.Web.UI.WebControls.ListItem> items = new List<System.Web.UI.WebControls.ListItem>(values.Length);

        foreach (var i in values)
        {
            items.Add(new System.Web.UI.WebControls.ListItem
                    {
                        Text = Enum.GetName(typeof(SchduleEnum), i),
                        Value = ((int)i).ToString()
                    }
                    );
        }

        return new SelectList(items);
    }


    }
}

查看

@model IEnumerable<MyDefaultValueTEST.Program>

@{
ViewBag.Title = "ScheduleProgram";
}

<h2>ScheduleProgram</h2>


@using (Html.BeginForm())
{
<table>
    <tr>
        <th style="border:1px solid Teal; background-color:Gray">
            ProgramName
        </th>
        <th style="border:1px solid Teal; background-color:Gray">
            ProgramCategory
        </th>
        <th style="border:1px solid Teal; background-color:Gray">  </th>
    </tr>

    @Html.EditorForModel()

</table>

<p>
    <input type="submit" value="Save Schedules" />
</p>
}

编辑器模板(Program.cshtml)
@model MyDefaultValueTEST.Program
<tr>
<td style="border:1px solid Teal">
    @Html.EditorFor(x => x.ProgramName)
</td>
<td style="border:1px solid Teal">
    @Html.EditorFor(x => x.ProgramCategory)
</td>
<td style="border:1px solid Teal">
    @Html.DropDownListFor(x => x.ScheduleID, (SelectList)ViewBag.ScheudleEnum, String.Empty)
</td>
<td>
    @Html.HiddenFor(x => x.ProgramID)
</td>

</tr>

阅读

  1. 如何在 MVC 3 中使用 SelectList 并在视图中设置选定的值

  2. 如何在 MVC3 Razor 中设置下拉列表的选定值

  3. MVC 3 布局页面、Razor 模板和 DropdownList

  4. DropdownListFor 的默认值

  5. HTML 下拉列表无法保持选定值

  6. 如何从 asp.net mvc 下拉列表获取值

  7. ASP.NET MVC ViewModel 和 DropDownList

  8. 使用 ViewModel 和 ModelBinder 在 ASP.NET MVC 中下拉列表的值为 null

  9. .NET MVC 下拉列表中 optgroup 的支持?

1个回答

1

你可以将你的模型声明为

public class TestModel
{
    public SchduleEnum SelectedScheduleEnum { get; set; }
    public ProgramCatagory SelectedProgram { get; set; }

    public IEnumerable<SelectListItem> ScheduleEnums
    {
        get { return this.GetScheduleEnums(); }
    }

    public IEnumerable<SelectListItem> SelectedPrograms
    {
        get { return this.GetSelectedPrograms(); }
    }

    private IEnumerable<SelectListItem> GetSelectedPrograms()
    {
        List<SelectListItem> items=new List<SelectListItem>();
        Enum.GetNames(typeof(ProgramCatagory)).ToList().ForEach(s=>{
            bool IsSelected=((int)Enum.Parse(typeof(ProgramCatagory), s)).Equals((int)SelectedScheduleEnum);
            if(IsSelected)
                this.SelectedProgram = (ProgramCatagory)Enum.Parse(typeof(ProgramCatagory), s);
            items.Add(new SelectListItem()
                {
                    Text = s,
                    Value = s,
                    Selected = IsSelected
                });
        });
        return items;
    }

    private IEnumerable<SelectListItem> GetScheduleEnums()
    {
        List<SelectListItem> items = new List<SelectListItem>();
        Enum.GetNames(typeof(SchduleEnum)).ToList().ForEach(s =>
        {
            bool IsSelected = ((int)Enum.Parse(typeof(SchduleEnum),s)).Equals((int)SelectedProgram);
            if (IsSelected)
                this.SelectedScheduleEnum = (SchduleEnum)Enum.Parse(typeof(SchduleEnum), s);
            items.Add(new SelectListItem()
            {
                Text = s,
                Value = s,
                Selected = IsSelected
            });
        });
        return items;
    }

}
public enum SchduleEnum {
    Daily = 0, 
    Weekly,
    Monthly 
};
public enum ProgramCatagory
{
    News=0 ,
    Movie,
    Discussion
};

在控制器中,

public ActionResult Index()
    {

        TestModel model = new TestModel();
        model.SelectedScheduleEnum = SchduleEnum.Monthly;
        return View(model);
    }

在视图中,您可以这样调用:
<%:Html.DropDownListFor(m=>m.SelectedProgram,Model.SelectedPrograms)%>
<%:Html.DropDownListFor(m=>m.SelectedScheduleEnum,Model.ScheduleEnums) %>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接