2015-07-13 51 views
-1

我對MVC比較陌生。在一個項目中我的工作我有日期元素的下拉菜單中的:在下拉菜單中執行代碼 - 菜單選擇

現在我要當從菜單中選擇一個日期更改屬性。這將允許我顯示所選日期的數據。 我試圖用這個控制器中的自定義操作:

[HttpPost] 
public ActionResult Select(int dateID) 
{ 

    List<DateTime> next14Days = new List<DateTime>(); 
    for (int i = 0; i < 14; i++) 
    { 
     next14Days.Add(DateTime.Now.Date.AddDays(i)); 
    } 

    DateTime selectedDate = next14Days.ElementAt((int)dateID); 
    var settings = new Settings(); 
    settings.date = selectedDate; 
    SettingsManager.SaveSettings(settings); 

    return RedirectToAction("Index", "Desks"); 
} 

然後我想從查看調用它,從下拉菜單中:

<div class="btn-group"> 
    <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" style="font-size:48px; font-family:'Segoe UI'; border:hidden; background-color:#0054a1; color: white"> 
    Datum 
    </button> 
    <ul class="dropdown-menu" style="font-size:40px" onselect=""> 
    @{ 
    List<DateTime> next14Days = new List<DateTime>(); 

    for (int i = 0; i < 14; i++) 
    { 
     next14Days.Add(DateTime.Now.Date.AddDays(0 + i)); 
    } 
    int j = 0; 
    foreach (var item in next14Days) 
    { 

    <li> 
     @Html.ActionLink(item.Date.ToString("D"), "Select", "Desks", new {dateID=j}, FormMethod.Post) 

     j++; 
    </li> 
    } 
    } 
    </ul> 
</div> 

我的問題是要通過選擇方法所需的參數。現在我得到一個路由錯誤。我如何告訴Select-Action選擇哪個日期?有其他/更簡單的方法來實現我的目標嗎?

Regards

回答

0

找到解決方案。

相反的:

@Html.ActionLink(item.Date.ToString("D"), "Select", "Desks", new {dateID=j}, FormMethod.Post) 

你只需要使用以下模式:

@Html.ActionLink(Linkname, Action, Controller, <your parameters>, null) 

所以基本上你只需要添加 「空」 的結尾,多數民衆贊成它。原因是你調用了ActionLink-Method的其他重載。一個不會導致未找到或類似的資源。

我的代碼現在看起來像這樣:

在下拉:

foreach (var item in next14Days) 
{ 
<li> 
@Html.ActionLink(item.Date.ToString("D"), "Select", "Desks", new { dateID = next14Days.IndexOf(item)}, null) 
</li> 
} 

在控制器:

public ActionResult Select(int dateID) 
    { 
     List<DateTime> next14Days = new List<DateTime>(); 
     for (int i = 0; i < 14; i++) 
     { 
      next14Days.Add(DateTime.Now.Date.AddDays(i)); 
     } 

     DateTime selectedDate = next14Days.ElementAt(dateID); 

     var newSettings = new Settings(); 
     newSettings.date = selectedDate; 

     SettingsManager.SaveSettings(newSettings); 

     return RedirectToAction("Index"); 
    } 

編輯:這則訊息的答案不明確這一點:HTML.ActionLink method