Asp.net

如何從 FormCollection 中獲取複選框值?

  • October 28, 2021

我有一個複選框和按鈕:

@using(Html.BeginForm())
{
   <div id="search-block">
       <input type="checkbox" name="showAll" id="showAll">Include completed
       <input type="submit" value="Apply"/>
   </div>
}

控制器中的第二件事:

[HttpPost]
public ActionResult Index(FormCollection collection)
{
   var showAll = collection["showAll"];
   TempData["showAll"] = showAll;

   ... 
   something
   ...
}

它實際上正在工作,但是:

如果未選中復選框,我將收到 null (不會打擾我)。

如果選中復選框,我會收到來自 的“on” FormCollection,這不是我需要的。我想收到真假。

我怎樣才能做到這一點?

<input type="checkbox" name="showAll" id="showAll">Include completed

將發布"on"或的值"off"

這不會綁定到布爾值

要接收布爾值,您可以使用 HTML Helper Checkbox Like

@Html.CheckBox("showAll")
<label for="showAll" style="display:inline">Include completed</label>

更新:

如果選中,則 html 幫助程序將回發"true,false",如果未選中,則為"false"

您可以將此解決方法作為

bool MyBoolValue= Convert.ToBoolean(collection["showAll"].Split(',')[0]);

這是因為 Html 助手類添加了一個額外的hidden欄位來保存複選框的狀態

我已經嘗試了輸入標籤,它的工作原理如下所示:

<form method="post">
   <input type="checkbox" id="chkRmb" name="chkRmb" /> Remember Me?
   <input type="submit" value="Log In" class="btn btn-default login-btn" />
</form>

在控制器中,比較字元串值並將其轉換為布爾值。

bool rmbMe = (formdata["chkRmb"] ?? "").Equals("on", StringComparison.CurrentCultureIgnoreCase);

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