ASP.NET MVC3: выбор значения по умолчанию в раскрывающемся списке - PullRequest
3 голосов
/ 20 февраля 2012

У меня есть модель с именем Program. Каждая программа будет иметь расписание телепередач, как описано ниже.

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

Каждая программа может иметь такие категории, как «Новости», «Фильм», «Обсуждение».

В представлении «Планирование программ» пользователи должны иметь возможность выбирать расписание из раскрывающегося списка. Однако в раскрывающемся расписании должны быть значения по умолчанию. Правило состоит в том, что расписание по умолчанию должно быть «Ежедневно», если это категория «новости». Расписание по умолчанию должно быть «Еженедельно», если категория «Кино». Расписание по умолчанию должно быть «Ежемесячно», если категория «Обсуждение».

У меня есть следующий код, который показывает пустой как значение по умолчанию в раскрывающемся списке расписания. Как изменить код, чтобы он отображал требуемые значения по умолчанию на основе правил, определенных выше?

Основано на принципе MVC: The UI logic belongs in the view. Input logic belongs in the controller. Business logic belongs in the model.

  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; }
}

CONTROLLER

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);
    }


    }
}

VIEW

@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. C # mvc 3 с использованием списка выбора с выбранным значением в представлении

  2. раскрывающийся список устанавливает выбранное значение в MVC3 Razor

  3. Страница макета MVC 3, шаблон бритвы и DropdownList

  4. DropdownList для значения по умолчанию

  5. Html.dropdownlist не сохраняет выбранное значение

  6. Получение значений из выпадающего списка asp.net mvc

  7. ASP.NET MVC ViewModel и DropDownList

  8. нуль раскрывающегося значения при использовании, viewmodel & modelbinder в asp.net mvc

  9. Поддержка optgroup в выпадающем списке .NET MVC?

1 Ответ

1 голос
/ 20 февраля 2012

Вы можете объявить свою модель как

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) %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...