Asp.Net MVC中DropDownListFor的用法

 在Asp.Net MVC中能夠用DropDownListFor的方式來讓用戶選擇已定列表中的一個數值。用法不復雜,這裏簡單作一個記錄。緩存

  •  首先咱們要定義一個 Model ,用戶在 DropDownList 中選擇指定的值賦給屬性 ReadyTimeHour
public class EricSunModel
{
    public string ReadyTimeHour { get; set; }
}

 

  • Model定義完畢以後,接下來處理Controller的邏輯
  • 【注:這裏用了ViewData來記錄DropDownList中所要顯示的全部列表數值】
public ActionResult EricSunAction()
{
    EricSunModel esModel = new EricSunModel();
    esModel.ReadyTimeHour = "00";

    GenerateReadyTimeViewData();

    return View(esModel);
}

private void GenerateReadyTimeViewData()
{
    ViewData["HourList"] = GetTimeHourList();
}

private List<SelectListItem> GetTimeHourList()
{
    List<SelectListItem> hourList = new List<SelectListItem>();

    for (int i = 0; i < 24; i++)
    {
        if (i < 10)
        {
            hourList.Add(new SelectListItem { Text = "0" + i.ToString(), Value = "0" + i.ToString() });
        }
        else
        {
            hourList.Add(new SelectListItem { Text = i.ToString(), Value = i.ToString() });
        }
    }

    return hourList;
}

 

  • 接下來咱們在View中能夠用下面一行代碼來綁定DropDownList
  • 【注:第一個參數爲綁定Model中的屬性,即-->要爲此屬性賦值】
  • 【注:第二個參數爲DropDownList的全部數據源】
@Html.DropDownListFor(m => m.ReadyTimeHour, ViewData["HourList"] as List<SelectListItem>)
  •  截圖以下所示

  

 

  • 若是咱們想在DropDownList中的最頂端添加一個默認值的話,請模仿下面的寫法:添加第三個參數
@Html.DropDownListFor(m => m.ReadyTimeHour, ViewData["HourList"] as List<SelectListItem>, "---Select---")
  •  截圖以下所示:
  • 這裏涉及到如何緩存DropDownList的全部數值問題(特別是提交表單,驗證不經過,須要再次返回本頁面的狀況),以下假設Model中包含屬性ReadyTimeHourList(是一個List<SelectListItem>),因爲頁面中沒有控件對此數據進行綁定,那麼在提交表單以後傳回給actionmodel中將收集不到此數值,咱們用HiddenFor在頁面中去緩存List的數值是不能成功的(將括號中的值換做ViewData["HourList"]也是行不通的),緣由是HiddenFor只能緩存單個數值
@Html.HiddenFor(m => m.ReadyTimeHourList)

 

  • 既然用頁面控件緩存的方式行不通,若是解決上述問題呢?請看以下代碼,若是驗證不能經過,那麼須要從新綁定ViewData["HourList"]的數值
  • 【實際上這裏涉及到了ViewData生命週期的問題,因爲提交表單以後,代碼進入了以下的Action中,超出了原來的ViewData的聲明週期,所以原來保存的ViewData的值將失效,因此須要再次的從新綁定】
[HttpPost]
public ActionResult EricSunAction(EricSunModel model)
{
    if (!ModelState.IsValid)
    {
        GenerateReadyTimeViewData();
        return View(model);
    }

    // model.ReadyTimeHour;

    return RedirectToAction("OtherActionName");
}

 

  • 這裏提供另外的一個經常使用知識點:ViewBag ViewData 以及 TempData 的區別。請看以下連接:

        http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications mvc

相關文章
相關標籤/搜索