2012-03-28 5 views
1

Ich konvertiere über zu MVC 3 von Webforms und hatte einige Schwierigkeiten bei der Lehre selbst. Ich habe ein ViewModel erstellt, das drei separate Auswahllisten mit den Werten für Monat, Tag und Jahr in meinem _Header füllen sollte. Ich denke, ich habe ein Strukturproblem. Das Endergebnis ist, dass ich eine unbehandelte Ausnahme im WWW-Dienst auf meinem Computer verursache und Visual Studio erscheint und möchte, dass ich es debugge. Jede Hilfe würde sehr geschätzt werden!Ich kann meine Monat, Tag, Jahr Dropdown-Listen nicht von meinem ASP.NET MVC3 ViewModel

Hier ist mein Code.

DateSearchViewModel.cs

namespace DH.ViewModels 
{ 
    public class DateSearchViewModel 
    { 
     //MONTH DROPDOWN LIST 
     public class MonthViewModel 
     { 
      public int ID { set; get; } 
      public string Month { set; get; } 
     }  

     private List<MonthViewModel> _months; 
     public List<MonthViewModel> Months 
     { 
      get 
      { 
       if (_months == null) 
       { 
        _months = new List<MonthViewModel>(); 
        _months.Add(new MonthViewModel { ID = 1, Month = "Jan" }); 
        _months.Add(new MonthViewModel { ID = 2, Month = "Feb" }); 
        _months.Add(new MonthViewModel { ID = 3, Month = "Mar" }); 
        _months.Add(new MonthViewModel { ID = 4, Month = "Apr" }); 
        _months.Add(new MonthViewModel { ID = 5, Month = "May" }); 
        _months.Add(new MonthViewModel { ID = 6, Month = "Jun" }); 
        _months.Add(new MonthViewModel { ID = 7, Month = "Jul" }); 
        _months.Add(new MonthViewModel { ID = 8, Month = "Aug" }); 
        _months.Add(new MonthViewModel { ID = 9, Month = "Sep" }); 
        _months.Add(new MonthViewModel { ID = 10, Month = "Oct" }); 
        _months.Add(new MonthViewModel { ID = 11, Month = "Nov" }); 
        _months.Add(new MonthViewModel { ID = 12, Month = "Dec" }); 
       } 
       return _months; 
      } 
     } 
     public int SelectedMonthID { set; get; } 


     //DAY DROPDOWN LIST 
     public class DayViewModel 
     { 
      public int ID { set; get; } 
      public string Day { set; get; } 
     } 
     private List<DayViewModel> _days; 
     public List<DayViewModel> Days 
     { 
      get 
      { 
       if (_days == null) 
       { 
        _days = new List<DayViewModel>(); 
        _days.Add(new DayViewModel { ID = 1, Day = "1" }); 
        _days.Add(new DayViewModel { ID = 2, Day = "2" }); 
        _days.Add(new DayViewModel { ID = 3, Day = "3" }); 
        _days.Add(new DayViewModel { ID = 4, Day = "4" }); 
        _days.Add(new DayViewModel { ID = 5, Day = "5" }); 
        _days.Add(new DayViewModel { ID = 6, Day = "6" }); 
        _days.Add(new DayViewModel { ID = 7, Day = "7" }); 
        _days.Add(new DayViewModel { ID = 8, Day = "8" }); 
        _days.Add(new DayViewModel { ID = 9, Day = "9" }); 
        _days.Add(new DayViewModel { ID = 10, Day = "10" }); 
        _days.Add(new DayViewModel { ID = 11, Day = "11" }); 
        _days.Add(new DayViewModel { ID = 12, Day = "12" }); 
        _days.Add(new DayViewModel { ID = 1, Day = "13" }); 
        _days.Add(new DayViewModel { ID = 2, Day = "14" }); 
        _days.Add(new DayViewModel { ID = 3, Day = "15" }); 
        _days.Add(new DayViewModel { ID = 4, Day = "16" }); 
        _days.Add(new DayViewModel { ID = 5, Day = "17" }); 
        _days.Add(new DayViewModel { ID = 6, Day = "18" }); 
        _days.Add(new DayViewModel { ID = 7, Day = "19" }); 
        _days.Add(new DayViewModel { ID = 8, Day = "20" }); 
        _days.Add(new DayViewModel { ID = 8, Day = "21" }); 
        _days.Add(new DayViewModel { ID = 8, Day = "22" }); 
        _days.Add(new DayViewModel { ID = 8, Day = "23" }); 
        _days.Add(new DayViewModel { ID = 8, Day = "24" }); 
        _days.Add(new DayViewModel { ID = 8, Day = "25" }); 
        _days.Add(new DayViewModel { ID = 8, Day = "26" }); 
        _days.Add(new DayViewModel { ID = 8, Day = "27" }); 
        _days.Add(new DayViewModel { ID = 8, Day = "28" }); 
        _days.Add(new DayViewModel { ID = 8, Day = "29" }); 
        _days.Add(new DayViewModel { ID = 8, Day = "30" }); 
        _days.Add(new DayViewModel { ID = 8, Day = "31" }); 
       } 
       return _days; 
      } 
     } 
     public int SelectedDayID { set; get; } 


     //YEAR DROPDOWN LIST 
     public class YearViewModel 
     { 
      public int ID { set; get; } 
      public string Year { set; get; } 
     } 
     private List<YearViewModel> _years; 
     public List<YearViewModel> Years 
     { 
      get 
      { 
       if (_years == null) 
       { 
        _years = new List<YearViewModel>(); 
        _years.Add(new YearViewModel { ID = 1, Year = "2009" }); 
        _years.Add(new YearViewModel { ID = 2, Year = "2010" }); 
        _years.Add(new YearViewModel { ID = 3, Year = "2011" }); 
        _years.Add(new YearViewModel { ID = 4, Year = "2012" }); 
       } 
       return _years; 
      } 
     }  
     public int SelectedYearID { set; get; } 
    } 
} 

CommonController.cs:

[ChildActionOnly] 
public ActionResult _Header() 
{ 
    DateSearchViewModel DateVM = new DateSearchViewModel(); 
    return View(DateVM); 
} 

_Header.cshtml:

@model DH.ViewModels.DateSearchViewModel 

@Html.DropDownListFor(x => x.SelectedMonthID, new SelectList(Model.Months, "ID", "Month"), "--Select--") 
@Html.DropDownListFor(x => x.SelectedDayID, new SelectList(Model.Days, "ID", "Day"), "--Select--") 
@Html.DropDownListFor(x => x.SelectedYearID, new SelectList(Model.Years, "ID", "Year"), "--Select--") 

_Layout.cshtml:

@{Html.RenderAction("_Header", "Common");} 
+0

Siehe meine DDL Tutorial http: // www .asp.net/mvc/tutorials/javascript/Arbeiten mit der Dropdown-Liste-Box-und-Jquery/Verwenden der Dropdown-Liste-Helper-mit-aspnet-mvc und http://blogs.msdn.com/b/Rickandy /archive/2012/01/09/cascading-dropdownlist-in-asp-net-mvc.aspx Wenn Sie es nicht herausfinden können, nachdem Sie sie gelesen haben, veröffentlichen Sie die einfachste mögliche Repro. - Warum haben Sie so viel Komplexität für einen Web-Service-Code? Mach etwas einfacher. – RickAndMSFT

+0

Nicht Ihr einziges Problem, aber Sie sollten diesen 'Html.RenderAction' Aufruf nicht in einen @ {} Block setzen. Auf diese Weise rufen Sie nur die Methode auf und verwirft das Ergebnis. Rufen Sie einfach '@ Html.RenderAction (...)' – bhamlin

+0

auf. Es wäre hilfreich, wenn Sie die Exception eingefügt hätten und in welcher Codezeile die Exception aufgetreten ist. –

Antwort

4

Ich habe das Gefühl, dass dein Modell zu kompliziert ist ... ein Modell für den Tag und das Jahr der Motte zu haben, erscheint mir als Overkill. Ich würde diese nur als Eigenschaften implementieren. Hier ist, wie ich dies erreichen würde:

Das Modell:

public class DateSearchViewModel { 
    public int Day { get; set; } 
    public int Month { get; set; } 
    public int Year { get; set; } 
} 

Der Controller:

public ActionResult _Header() { 
    DateSearchViewModel DateVM = new DateSearchViewModel(); 
    return View(DateVM); 
} 
public ActionResult _Header(DateSearchViewModel vm) { 
    if(ModelState.IsValid) { 
    // save vm to database, etc. 
    } 
    return View(vm); 
} 

Und die Aussicht:

@{ 
    var days = new List<SelectListItem>(); 
    for(var i = 1; i <= 31; i++) { 
    days.Add(new SelectListItem { Text = i.ToString(), Value = i.ToString(), Selected = Model.Day == i }); 
    } 
    var months = new List<SelectListItem> { 
    new SelectListItem {Text = "Jan", Value = "1", Selected = Model.Month == 1}, 
    new SelectListItem {Text = "Feb", Value = "2", Selected = Model.Month == 2}, 
    new SelectListItem {Text = "Mar", Value = "3", Selected = Model.Month == 3}, 
    new SelectListItem {Text = "Apr", Value = "4", Selected = Model.Month == 4}, 
    new SelectListItem {Text = "May", Value = "5", Selected = Model.Month == 5}, 
    new SelectListItem {Text = "Jun", Value = "6", Selected = Model.Month == 6}, 
    new SelectListItem {Text = "Jul", Value = "7", Selected = Model.Month == 7}, 
    new SelectListItem {Text = "Aug", Value = "8", Selected = Model.Month == 8}, 
    new SelectListItem {Text = "Sep", Value = "9", Selected = Model.Month == 9}, 
    new SelectListItem {Text = "Oct", Value = "10", Selected = Model.Month == 10}, 
    new SelectListItem {Text = "Nov", Value = "11", Selected = Model.Month == 11}, 
    new SelectListItem {Text = "Dec", Value = "12", Selected = Model.Month == 12}, 
    }; 
    var years = new List<SelectListItem>(); 
    for(var i = 2009; i <= 2012; i++) { 
    years.Add(new SelectListItem { Text = i.ToString(), Value = i.ToString(), Selected = Model.Year == i }); 
    } 
} 
@using(Html.BeginForm()) { 
    @Html.DropDownListFor(x => x.Month, months) 
    @Html.DropDownListFor(x => x.Day, days) 
    @Html.DropDownListFor(x => x.Year, years) 
    <input type="submit" /> 
} 
+0

Danke ich habe dein Beispiel benutzt. Mit freundlichen Grüßen! – Maddhacker24

+0

Danke für ein sehr nützliches Beispiel! –

Verwandte Themen