2014-04-03 1 views
0

У меня есть несколько текстовых полей и один DropDownList как:Как связать значение с выпадающим списком в asp.net mvc?

 for (int i = 0; i < count; i++) 
     { 
     <tr> 
     <td>@Html.DropDownListFor(m => m.GetTimeSheetDetails[i].PROJ_ID, (SelectList)ViewBag.ProjectList, "-- Choose a Project --", new { @id = "ddlProjectvalue" }) 
     </td> 
     <td>@Html.TextBoxFor(m => m.GetTimeSheetDetails[i].SUN_HRS, new { style = "width:50px; height:30px;", @class = "sunhrs" }) 
     </td> 
     <td>@Html.TextBoxFor(m => m.GetTimeSheetDetails[i].MON_HRS, new { style = "width:50px; height:30px;", @class = "monhrs" }) 
     </td> 
     <td>@Html.TextBoxFor(m => m.GetTimeSheetDetails[i].TUE_HRS, new { style = "width:50px; height:30px;", @class = "tuehrs" }) 
     </td> 
     <td>@Html.TextBoxFor(m => m.GetTimeSheetDetails[i].WED_HRS, new { style = "width:50px; height:30px;", @class = "wedhrs" }) 
     </td> 
     <td>@Html.TextBoxFor(m => m.GetTimeSheetDetails[i].THU_HRS, new { style = "width:50px; height:30px;", @class = "thurhrs" }) 
     </td> 
     <td>@Html.TextBoxFor(m => m.GetTimeSheetDetails[i].FRI_HRS, new { style = "width:50px; height:30px;", @class = "frihrs" }) 
     </td> 
     <td>@Html.TextBoxFor(m => m.GetTimeSheetDetails[i].SAT_HRS, new { style = "width:50px; height:30px;", @class = "sathrs" }) 
     </td> 
     </tr> 
     </td> 
     } 

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

public int GetTimsheetData(int empid, TimesheetModel TimesheetModel) 
{ 
    // GetimeSheet all the rows according employee name 
    var emps = (from n in db.TIMESHEETs 
       where n.RES_ID == empid 
       select n).ToList(); 
    int count = emps.Count(); 
    HttpContext.Current.Session["count"] = count; 
    try 
    { 
     List<TimesheetModel> emptyList = new List<TimesheetModel>(); 
     TimesheetModel.GetTimeSheetDetails = emptyList; //taking Empty List and bind to GetTimesheetDetails for Add items into it. 


     //if Employee Name has more than one record. 
     if (emps.Count() > 0) 
     { 
      foreach (var timeSheet in emps) 
      { 
       TimesheetModel item = new TimesheetModel(); 
       item.WEEK_CAL_ID = timeSheet.WEEK_CAL_ID; 
       item.PROJ_ID = timeSheet.PROJ_ID; 
       item.SUN_HRS = timeSheet.SUN_HRS; 
       item.MON_HRS = timeSheet.MON_HRS; 
       item.TUE_HRS = timeSheet.TUE_HRS; 
       item.WED_HRS = timeSheet.WED_HRS; 
       item.THU_HRS = timeSheet.THU_HRS; 
       item.FRI_HRS = timeSheet.FRI_HRS; 
       item.SAT_HRS = timeSheet.SAT_HRS; 
       TimesheetModel.GetTimeSheetDetails.Add(item); 

      } 

     } 

    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
    return count; 
} 

и возвращение к контроллеру, как:

public ActionResult GetEmployeeDetails(int empId, string btn, TimesheetModel timesheetModel) 
{ 
    Employer_BL employerBL = new Employer_BL(); 
    ViewBag.ProjectList = timesheetModel.getProjects; 

    //If GetTimesheetData returns morethan one record 
    if (employerBL.GetTimsheetData(empId, timesheetModel) >= 0) 
    { 
     timesheetModel.EMP_ID = empId; 

     //passes model data to View 
     return View("Timesheet", timesheetModel); 
    } 
    TimesheetModel model = new TimesheetModel(); 
    model.EMP_ID = empId; 
    return View("Timesheet", model); 
} 

Где я делаю неправильно, DropDownList показывает начальный индекс вместо того чтобы показывать текст передачи значений. Пожалуйста, помогите мне.

в отдельном классе я написал, как показано ниже, чтобы получить имена проектов:

public SelectList getProjects() 
    { 
     IEnumerable<SelectListItem> projectslist = (from proj in res.PROJECTs where proj.IS_DELETED == "N" select proj).AsEnumerable().Select(projt => new SelectListItem() { Text = projt.NAME, Value = projt.ID.ToString() }); 
    return new SelectList(projectslist, "Value", "Text", PROJ_ID); 
    } 

ответ

1

Это зависит от ViewBag.ProjectList, который я не могу найти на исходном коде. Вы можете заполнить его объектом типа IEnumerable<SelectListItem> с одним из объектов Selected объектов, установленных на true.

public IEnumerable<SelectListItem> GetList() 
{ 
    return (from proj in res.PROJECTs where proj.IS_DELETED == "N" select proj).AsEnumerable().Select(projt => new SelectListItem() { Text = projt.NAME, Value = projt.ID.ToString() }).ToList(); 
} 

на контроллере

ViewBag.ProjectList = GetList(); 

на ваш взгляд

@{ 
    var projectList = 
     new SelectList(ViewBag.ProjectList, "Value", "Text", Model.GetTimeSheetDetails[i].PROJ_ID.ToString()) 
} 
@Html.DropDownListFor(m => m.GetTimeSheetDetails[i].PROJ_ID, projectList, "-- Choose a Project --") 
+0

Я редактировал и добавлял код для получения имен проектов, пожалуйста, проверьте его. – Sanjay

+0

Вы не приняли результат в «ViewBag» в своем контроллере. – qsoft

+0

Я не упоминал здесь, у меня был код уже в моем проекте. – Sanjay

0

Вы можете попробовать, как этот метод:

[NonAction] 
private IEnumerable<SelectListItem> GetData() 
{ 
    return new List<SelectListItem>() 
    { 
     new SelectListItem(){ Text="--Select--", Value="0"}, 
     new SelectListItem(){ Text="A", Value="1"}, 
     new SelectListItem(){ Text="B", Value="2"}, 
     new SelectListItem(){ Text="C", Value="3"}, 
    }; 
} 

Call this function in Action Method 
public ActionResult Create() 
{ 
    ViewData["categories"] = GetData(); 
    return View(); 
} 


On your html page: 
    <%= Html.DropDownList("cat", (IEnumerable<SelectListItem>)ViewData["categories"])%> 
+0

Спасибо за Clue, но я не хочу, чтобы связать все данные, я хочу, чтобы присвоить значение DropDownList в показать текст, потому что я уже привязываю данные, я хочу получить значение, когда возвращаюсь с empid и зависит от значения, которое он показывает текст @Shashank – Sanjay

0

Вы можете использовать viewbag. в контроллере вы можете прочитать данные из базы данных:

public ActionResult Create() 
{ 
    ViewBag.ClassName = new SelectList(objclassrep.GetClasslist(), "Id", "ClassName"); 
} 

И в вашей модели представления вы можете прочитать данные из контроллера, как это:

<div class="editor-label"> 
      @Html.LabelFor(model => model.ClassId) 
</div> 
<div class="editor-field"> 
      @Html.DropDownListFor(x => x.ClassId, (SelectList)ViewBag.ClassName); 
      @Html.ValidationMessageFor(model => model.ClassId) 
</div> 

Этот код автоматически связывает идентификаторы ваших данных DDL Вот идентификатор класса.

Это функция й getClassList:

public List<Class> GetClasslist() 
     { 
      return _dbcontext.Classes.ToList(); 
     } 
+0

Спасибо за Clue, но мой выпадающий список содержит List, например GetTimesheetDetail s [index] .Proj_Id, мне нужно передать значение этому выпадающему списку, я прохожу, как указано выше, но он не работает. @Iti Tyagi. – Sanjay

+0

Как вы можете видеть в моем ответе, я передаю значение DDL, вот класс Id.do вы правильно наберете имя VIEWBAG? –

+0

Этот код является частью моего проекта, и я тестировал его, и он работает –