2009-08-18 146 views
3

我有一些複選框,看起來像這樣如何檢查ASP.NET MVC中的複選框是否已選中?

這是一種形式。所以當它進入我的Action方法時,我只是有一個表單集合變量。現在我試着做

frmSign [「Remember」];

所以我試圖將其立即轉換爲布爾值,但失敗了。然後我做的ToString(),我意識到,包含在這個值是

「真,假」

這是正常的嗎?爲什麼是真的,假的?現在是真的還是假的?

+0

你在頁面上有兩個嗎? – 2009-08-18 06:15:51

+0

不,這是我尋找的第一件事。我沒有。 我注意到通過螢火蟲,但我有這個。不知道這是否正常。 chobo2 2009-08-18 06:45:07

+0

啊。那麼,我對MVC一無所知,特別是,所以也許沒關係。我認爲其他海報的答案更有幫助,所以我會把它留給你。然而,從純粹的「請求」角度來看,這解釋了這兩個價值。 – 2009-08-18 06:51:36

回答

9

您可以只需添加一個布爾參數到你的動作:

public ActionResult LogIn(string username, string password, bool remember) 
{ 
    // You have it 
} 

此外,您可以使用RouteValues [「記住」]獲得ValueProviderResult。
所以,你可以這樣做:

public ActionResult LogIn(string username, string password) 
{ 
     bool remember = false; 
     ValueProviderResult val; 
     if (RouteValues.TryGetValue(key, out val)) 
      remember = (bool)val.ConvertTo(typeof(bool)); 
     // Now you have it 
} 

但我更喜歡的原因很明顯第一選項。

至於問:

這是正常的嗎?爲什麼是真的,假的?現在它是真是假?

是的,這是正常的。 MVC中的複選框助手總是生成值爲「False」的隱藏輸入。如果未選中複選框,則需要提供False值。
爲什麼?
由於根據W3.ORG,只有在複選框被選中時纔會將值發佈到服務器,否則不會(因此您不知道它是True還是False,例如爲null)。

因此,如果您選擇複選框「true,false」來到服務器,並且您可以安全地假定該值爲true。
如果沒有選擇複選框,則「false」會進入服務器,您可以確定它未​​被選中。

要進一步說明:值(根據W3.ORG)用逗號分隔。因此,在單一形式下使用相同名稱的不同輸入(即使輸入是不同類型的:複選框,收音機,文本,隱藏等)也是完全正確的。

+0

雅第一個選項的作品,但我只是不明白爲什麼它在一個frmCollection擰緊它。這可能是某種錯誤,或者我做錯了什麼。我喜歡frmCollection,因爲它讓事情更容易傳遞到UpdateModel。我想我可以保留frmCollection並傳入一個bool參數。這似乎很奇怪。 – chobo2 2009-08-18 06:49:03

+1

我已經添加了解釋。 – 2009-08-18 07:24:35

相關問題