2013-05-08 86 views
0

我有一個dropdownlist列表可選日期。我想要預先選擇某個日期,但即使它被標記爲「已選定」,它在查看下拉列表時也不會顯示爲所選日期。DropDownListFor未選擇所選

enter image description here

<%=Html.DropDownListFor(model => model.SelectDropOfDate, Model.DropOffDates, new { id = "dropOfDate" })%> 

在一個線程,我讀他們說,「model.SelectDropOfDate」(在這種情況下)是所選擇的項目,如果是那樣的話,我應該選擇值或在文本爲了匹配列表中的那個?

(the list of dates).Where(x=>x.Selected).Select(z=>z.Value).ToString(); 

(PS:我都試過值和文本,並沒有一次成功)

任何想法?

+0

「model.SelectDropOfDate」 - 不是真的! :)所以'getDropOffDates'將模型返回到您的'DropDownListFor'所在的視圖?因爲如果是這樣,那麼這意味着你的模型是一個集合,並且在執行'Model.DropOffDates'是不正確的? – 2013-05-08 09:32:39

+0

von訴我不確定你的意思,你可以進一步描述它嗎? – Jennica 2013-05-08 10:01:23

+0

Html助手使用modelstate中的值作爲第一選擇。您可以在返回視圖之前嘗試清除模型狀態,並查看問題出在服務器端還是客戶端。如果問題仍然存在,那麼它可能會有一些腳本用選定的值混淆。 – maxlego 2013-05-08 11:11:54

回答

1

您應該在模型上設置SelectDropOfDate屬性的值,而不是設置爲相應的值(不是文本)。例如:

model.SelectDropOfDate = departureDate.ToString("d/M/yyyy", new DateTimeFormatInfo()); 

另請注意,該值必須具有精確匹配,以便相應元素被預先選擇。

+0

model.SelectDropOfDate = dropOffDate.ToString(「d/M/yyyy」,new DateTimeFormatInfo()); 增加了dropoffdate,但它不起作用。選擇框中的選定項始終是DatesList中的第一個,而不是dropoffdate(它是列表中的第三個) 更新:在瀏覽器的源代碼中,正確的日期實際上標記爲選中,<選項選中=「selected」value =「23/5/2013」​​> 23.5.2013,但是在查看下拉列表時,我看到21.5.2013被選中。這沒有任何意義! – Jennica 2013-05-08 10:08:05

0

好像DropDownListFor在asp.mvc有這個錯誤,在「選擇」將無法正常工作我想怎麼一回事,因爲的Lamda表達的覆蓋的HtmlHelper「選定」 property.So只是確保model.SelectDropOfDate=departureDate.ToString("d/M/yyyy", new DateTimeFormatInfo())已運行。 我已經在Mvc3中試過了,當值真的匹配時它會選擇寫入項目。

0

我的appologies,有一個愚蠢的JavaScript覆蓋我的選擇,搞砸了。我確實創建了一個測試項目來驗證這裏的建議,但這裏是我發現的(對於其他人閱讀此主題):

selectedDropOfDate不必填寫,實際上,它根本無法工作有填寫。有列表有一個項目被標記爲選擇=真正適用。

示例代碼

型號:

public class Home 
    { 
     public string Selected { get; set; } 
     public List<SelectListItem> Items { get; set; } 
    } 

控制器:

public ActionResult Index() 
     { 
      var model = new Home(); 
      model.Items = GetItems(DateTime.Now, DateTime.Now.AddDays(3)); 
      return View(model); 
     } 

     private List<SelectListItem> GetItems(DateTime start, DateTime end) 
     { 
      var dates = new List<DateTime>(); 
      for (double i = 0; i < 100; i++) 
      { 
       dates.Add(start.AddDays(i + 1)); 
      } 

      var selectList = new List<SelectListItem>(); 
      selectList.AddRange(dates.Select(x => new SelectListItem 
      { 
       Selected = x.Date == end.Date, 
       Text = x.ToString("d.M.yyyy"), 
       Value = x.ToString("d/M/yyyy", new DateTimeFormatInfo()) 
      })); 

      return selectList; 
     } 

查看:

<%= Html.DropDownListFor(model => model.Selected, Model.Items) %>