Asp.net-Mvc-3

將復選框綁定到 MVC 中的 int 數組/可枚舉

  • December 16, 2011
@Html.CheckBox("orderNumbers", new { value = 1 })
@Html.CheckBox("orderNumbers", new { value = 2 })
@Html.CheckBox("orderNumbers", new { value = 3 })
@Html.CheckBox("orderNumbers", new { value = 4 })
@Html.CheckBox("orderNumbers", new { value = 5 })

[HttpPost]
public ActionResult MarkAsCompleted(IEnumerable<int> orderNumbers) { }

[HttpPost]
public ActionResult MarkAsCompleted(IEnumerable<string> orderNumbers) { }

如果我在我的操作方法中使用第一個簽名,我會得到一個空的IEnumerable.

如果我使用第二個簽名,我確實收到了值,但我也收到了未選中值的錯誤值(因為 MVC 模式使用隱藏欄位隱藏所有復選框)。

例如,我會收到類似的東西orderNumbers = { "1", "2", "false", "4", "false" }

為什麼我不能只獲取數字列表?

因為這就是提供的CheckBoxFor助手的工作方式。

您必須自己為複選框生成 html。然後不會生成隱藏的輸入,您將只獲得選定的整數值。

您可以通過以下方式獲取所有檢查值。

控制器程式碼:

   public ActionResult Index()
   {            
       return View();
   }

   [AcceptVerbs(HttpVerbs.Post)]
   public ActionResult Index(string[] orderNumbers)
   {
       return View();
   }

查看程式碼:

@using (Html.BeginForm())
{
   <input name="orderNumbers" type="checkbox" value="1" />
   <input name="orderNumbers" type="checkbox" value="2" />
   <input name="orderNumbers" type="checkbox" value="3" />
   <input name="orderNumbers" type="checkbox" value="4" />
   <input name="orderNumbers" type="checkbox" value="5" />

   <input type="submit" name="temp" value="hi" />
}

請記住一件事,您需要為所有復選框提供相同的名稱。在數組中,您將獲得所有選中復選框的值。

引用自:https://stackoverflow.com/questions/8533972