簡體   English   中英

如何將值綁定到ASP.NET MVC中的dropdownlist?

[英]How to bind value to dropdownlist in 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>
        }

而且我想將數據庫中的數據綁定到所有字段,每件事都完美地顯示了數據,但是即使我將值傳遞給dropdownlist,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);
    }

這取決於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 --")

您可以嘗試使用這種方法:

[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"])%>

您可以使用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>

該代碼自動將您的數據ID綁定到DDL。 這是類ID

這是getClassList函數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM