2014-05-09 4 views
0

보기에서 컨트롤러로의 드롭 다운 목록에서 선택한 연도와 월을 얻는 방법. 내가 그것의주는 오류를봤을 때 "Yearitems"키가있는 'IEnumerable'유형의 ViewData 항목이 없습니다. 나는 Asp.net mvc에 새로운 것이므로 어떤 도움도 Appriciated 될 것입니다. 미리 감사드립니다. 선택한 연도와 월을 asp.net의 컨트롤러로 드롭 다운 목록에서 가져 오는 방법 MVC

이 내 컨트롤러 내보기

<h3>Search by PhoneNumber:@Html.TextBox("SearchString",ViewBag.CurrentFilter as string) </h3> 


    <p><h3>Year:@Html.DropDownList("Yearitems", (IEnumerable<SelectListItem>)ViewBag.SelectList as SelectList, "Select Year")</h3> 

    <h3>Month:@Html.DropDownList("MonthItems",(IEnumerable<SelectListItem>)ViewBag.SelectMonthList as SelectList,"Select Month")</h3></p> 

<p><input type="submit" value="Search" /></p> 

<script> 
    $(document).ready(function() { 
     $("#Yearitems").change(function() { 

      //alert($("#Yearitems>option:selected").attr("Value")); 
      $.ajax({ 
       type: "Post", 
       url: '@Url.Action("GetMonths","AirtelManagement")', 
       data: { YearId: $("#Yearitems>option:selected").attr("Value") }, 
       datatype: "Json", 
       success: function (data) { 

        $("#MonthItems").html(""); 
        $.each(data, function (index, item) { 
         $("#MonthItems").append(new Option(item.MonthName, item.MonthSelectedId)); 
        }); 
       }, 
       error: function() { 
        alert("Select Year"); 
       } 
      }); 
     }); 
    }); 
</script> 

} 

입니다.

 public ActionResult ViewDataOfDatabase(string sortorder, string currentFilter, string searchString, int? page,string SelecetedYear,string SelectedMonth) 
    { 

     AirtelManagementModel _Airtelmodel = new AirtelManagementModel(); 
     IEnumerable<clsYearOfDate> SelectList = GetYears(); 
     //IEnumerable<MonthListClass> SelectMonthList = GetMonths(YearId); 
     IEnumerable<SelectListItem> Yearitems = (from v in SelectList 
              select new SelectListItem() 
              { 
               Value = v.YearSelectedId.ToString(), 
               Text = v.YearOfDate.ToString(), 


              }); 
     ViewBag.SelectList = Yearitems; 

     //IEnumerable<SelectListItem> MonthItems = (from m in SelectMonthList 
     //           select new SelectListItem() 
     //           { 
     //            Value = m.MonthSelectedId.ToString(), 
     //            Text = m.MonthName, 


     //           }); 
     //ViewBag.SelectMonthList = MonthItems; 
     IEnumerable<SelectListItem> MonthItems = Enumerable.Empty<SelectListItem>(); 
     ViewBag.SelectMonthList = MonthItems; 
     List<AirtelManagementModel> list = ViewDetails(); 
     ViewBag.CurrentSort = sortorder; 

     ViewBag.PhoneSortParm = String.IsNullOrEmpty(sortorder) ? "Phone_desc" : ""; 
     if (searchString != null) 
     { 
      page = 1; 
     } 
     else 
     { 

      searchString = currentFilter; 
     } 
     //if(searchString!=null) 
     //{ 
     ViewBag.SelectList = SelecetedYear; 
     ViewBag.SelectMonthList = SelectedMonth; 
      ViewBag.CurrentFilter = searchString; 
      var airteldetails = from _model in list 
           select _model; 
      if(!String.IsNullOrEmpty(searchString)) 
      { 
       airteldetails=airteldetails.Where(A=>A.AirtelNumber.ToString().Contains(searchString.ToString())); 

      } 

      //airteldetails=airteldetails.OrderByDescending(A=>A.AirtelNumber); 
      int pageSize = 5; 
      int pageNumber = (page ?? 1); 
      //return View(airteldetails.ToList()); 
      return View(airteldetails.ToPagedList(pageNumber, pageSize)); 
     //} 
     //if (list.Count > 0) 
     //{ 
     // var airteldetails = from _model in list 
     //      select _model; 
     // return View(airteldetails.ToPagedList(pageNumber,pageSize)); 
     //} 
     //else 
     //{ 
     // ModelState.AddModelError("Error", "No Data found in Database"); 
     // return RedirectToAction("ImportExcelFile", "AirtelManagement"); 
     //} 
    } 
+0

컨트롤러 조치 방법을 게시 할 수 있습니까? – Neel

+0

확인해보세요. 지금 추가했습니다. – user3273883

+0

그러나 컨트롤러 항목에 이미 Yearitems 및 MonthItems 변수가 있습니다. @Gary Schreiner – user3273883

답변

1

당신의 선택의 이름은/DDL은 DDL

0
일치하도록 컨트롤러 액션 메소드의 매개 변수, 즉 public ActionResult ViewDataOfDatabase(...,String YearItems, String MonthItems)와 동일 또는 @Html.DropDownList("name"...- SelectedMonthSelectedYear에서 이름을 변경해야

FormCollection에서 데이터 읽기 :

public ActionResult ViewDataOfDatabase(FormCollection form) 
{ 

    string Month = form["MonthItems"].ToString(); 
............................. 
.............................. 

} 
+1

이것이 가능할 수도 있지만, html을 편집하고 양식을 제출하는 사람이 당신을 열어 코드에서 더 많은 null 검사와 매개 변수 검사를 추가해야합니다. 강력하게 형식화 된 입력 매개 변수를 명시 적으로 정의하면 코드 전체로 이동하기 전에 전체 작업이 오류를 일으키고 500을 던집니다. 조금 깔끔하게 정리하고 처음에는 유효성 검사를 추가하며 IMHO는 더욱 안전합니다. –

+0

예 @GarySchreiner 첫 번째 옵션은 Model 객체를 사용한 강력한 유형보기이지만 Op 시나리오에서는 OpC가 FormCollection을 사용하는 것이 훨씬 낫습니다. –