2013-12-10 142 views
0

我是新來asp.net MVC 3.我想創建每年,每月和每天的下拉菜單。我創建了一個收集常用函數的幫助類。見下文。下拉選擇ASP.Net MVC 3

常見

Public Shared Function GetYearsList() As List(Of SelectListItem) 

    Dim items As New List(Of SelectListItem) 

    For i = -1 To 2500 
     Dim item As New SelectListItem 

     item.Text = Now.AddYears(i).Year.ToString() 
     item.Value = Now.AddYears(i).Year.ToString() 

     If i = Now.Year Then 
      item.Selected = True 
     End If 

     items.Add(item) 
    Next 

    Return items 

End Function 

在控制類。

Function Index() As ActionResult 

    ViewData("Year") = Command.GetYearsList() 
    ViewData("Month") = Command.GetMonthsList() 
    ViewData("Day") = Command.GetDaysList() 

    Return View() 

End Function 

在查看頁面。

@Html.DropDownList("Year", DirectCast(ViewData("Year"), List(Of SelectListItem)), New With {.onchange = "setDate();"}) 

但它沒有選擇當前年份。我該如何選擇當年。否則有其他解決方案呢?謝謝大家。

回答

1

我用C#展示了你想要的東西。我認爲你可以很容易地將它重寫到VB。

首先,爲視圖製作視圖模型類。

public class SomeViewModel 
{ 
    public SomeViewModel() 
    { 
     this.Years = new List<int>(); 

     for (int i = -1; i <= 2500; i++) 
     { 
      this.Years.Add(DateTime.Now.AddYears(i).Year); 
     } 

     this.SelectedYear = DateTime.Now.Year; 
    } 

    public int SelectedYear { set; get; } 
    public List<int> Years { set; get; } 
} 

它有一個屬性包含年份,另一個爲選定的屬性。

其次,做一個簡單的控制方法:

public ActionResult Index() 
{ 
    var model = new SomeViewModel(); 

    return View(model); 
} 

在此之後,使你的強類型的視圖:

@model YourAppNameSpace.ViewModels.SomeViewModel 

... 

@Html.DropDownListFor(model => model.SelectedYear, new SelectList(Model.Years)) 

它將使包含一個DropDownList這些年來,而選擇今年是今年。

+0

我不想爲年份創建新班級。它來自一個共同的幫手類。那麼,我該怎麼做? – zanhtet

+0

這不是一年。這是該視圖的視圖模型。它應該包含您要在視圖中顯示的所有數據。年,月等 – jannagy02

+0

對我而言,生日日期屬性在視圖模型中。所以,年,月和日不應該包含在View模型中。對於回發,我爲生日日期創建了一個隱藏。然後將這三個下拉值組合併發布到服務器。所以,這些年,月,日的數據來自於一個普通的類,並且具有共同的功能。謝謝你的幫助。 – zanhtet