2016-10-12 2 views
2

У меня есть перечисление в моей моделикак Pass Enum INT значение для контроллера

public enum Months 
    { 
     January = 1, 
     February = 2, 
     March = 3, 
     April = 4, 
     May = 5, 
     June = 6, 
     July = 7, 
     August = 8, 
     September = 9, 
     October = 10, 
     November = 11, 
     December = 12 
    } 

View для названий месяцев отображения

<div class="left row"> 
    @using (Html.BeginForm("ViewDetails", "Employees", FormMethod.Post)) 
    { 
     <input type="hidden" id="UserId" name="UserId" value="@ViewBag.UserId" /> 
     <div class="col-sm-4"> 
      <div class="col-sm-6"> 
       @Html.DropDownList("SelMonth", new SelectList(Enum.GetValues(typeof(OSCTrackWeb.Models.AttendanceMaster.Months))), "Select Month", new { @class = "form-control" }) 
      </div> 
      <div class="col-sm-6"> 
       @Html.DropDownList("SelYear", Enumerable.Range(DateTime.Now.Year, 10).Select(x => new SelectListItem { Text = x.ToString() }), "Select Year", new { @class = "form-control" }) 
      </div> 
     </div> 

      <input class="btn btn-primary" type="submit" value="Filter" /> 
      <input class="btn btn-info" type="button" value="Reset" onclick="return Reset();" /> 

    } 
</div> 

Теперь я хочу значение INT для перечисления месяца, выбранный из формы в контроллере

public ActionResult ViewDetails(int UserId, string currentFilter, int? SelMonth, int? SelYear, string searchString, int? Page_No) 
    { 

     int Size_Of_Page = 10; 
     int No_Of_Page = (Page_No ?? 1); 

     if (searchString != null) 
     { 
      No_Of_Page = 1; 
     } 
     else 
     { 
      searchString = currentFilter; 
     } 
     ViewBag.CurrentFilter = searchString; 

     ViewBag.UserId = UserId; 

     if (UserId != null) 
     { 
      if (SelMonth == null && SelYear == null) 
      { 
       SelMonth = DateTime.Now.Month; 
       SelYear = DateTime.Now.Year; 

       List<AttendanceMaster> amobj = db.AttendanceMasters.Where(s => s.EmpId == UserId && s.AttendanceDate.Value.Month == SelMonth && s.AttendanceDate.Value.Year == SelYear).ToList(); 

        ViewBag.Name = LoggedUser.Name; 
        IPagedList<AttendanceMaster> lstdtl = amobj.ToPagedList(No_Of_Page, Size_Of_Page); 
        return View("ViewDetails", lstdtl); 

      } 
      else 
      { 
       List<AttendanceMaster> amobj = db.AttendanceMasters.Where(s => s.EmpId == UserId && s.AttendanceDate.Value.Month == SelMonth && s.AttendanceDate.Value.Year == SelYear).ToList(); 

       ViewBag.Name = LoggedUser.Name; 
       IPagedList<AttendanceMaster> lstdtl = amobj.ToPagedList(No_Of_Page, Size_Of_Page); 
       return View("ViewDetails", lstdtl); 
      } 
     } 
     else 
     { 
      return null; 
     } 

    } 

так, как я могу получить Int значение как 1 для 6 января на июнь и т.д. help me

+0

Почему в мире вы хотели бы сделать это - сво 'enum' так параметр в вашем методе должен быть «месяцем»? SelMonth', а не 'int? SelMonth' –

+0

, потому что я хочу, чтобы int enum за этот месяц был выбран, поэтому я могу сравнить его в запросе linq из-за запроса linq, не позволяет лить –

+0

Вы передали его перед запросом - var mth = (int SelMonth); 'и используйте' mth 'в запросе :) –

ответ

2

Вы можете обновить действие подпись на следующее:

public ActionResult ViewDetails(int UserId, string currentFilter, OSCTrackWeb.Models.AttendanceMaster.Months SelMonth, int? SelYear, string searchString, int? Page_No) 

MVC будет связывать поданное значение самого вашего перечисления , Если ничего не предусмотрено, значение SelMonth будет равно 0 (несмотря на то, что вы не определили значение перечислимого числа для 0).

Если вам нужно, вы можете проверить, если предоставленная стоимость определяются в вашем перечислении с

Enum.IsDefined(typeof(OSCTrackWeb.Models.AttendanceMaster.Months), SelMonth); 
1

Enum по существу просто int, поэтому вы можете наложить SelMonth на Months.

Так как ваш SelMonth обнуляемый, вы должны сделать это как то

Months month = (Month)SelMonth.GetValueOrDefault(); 
Смежные вопросы