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 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM