2010-01-07 122 views
1

當您在Visual Studio 2008中啓動ASP.NET MVC項目時,會得到一個滿載的站點模板,包括登錄窗體等。在默認的形式登錄,您會在標記找到這個......ASP.NET MVC新手 - 默認登錄頁面記住我複選框

<%= Html.CheckBox("rememberMe") %> 

當您在瀏覽器的源代碼,你會看到,這使它對...

<input id="rememberMe" name="rememberMe" type="checkbox" value="true" /> 
<input name="rememberMe" type="hidden" value="false" /> 

這個隱藏字段的目的是什麼,以及默認值?是否有一個原因?對我沒有意義。

回答

2

這是從ASP.NET MVC源的註釋:

// Render an additional <input type="hidden".../> for checkboxes. This 
// addresses scenarios where unchecked checkboxes are not sent in the request. 
// Sending a hidden input makes it possible to know that the checkbox was present 
// on the page when the request was submitted. 

簡而言之:未選中複選框(值)在請求不被髮送。如果取消選中該複選框,則隱藏輸入的值將在請求中發送。

+0

感謝您的回答!雖然這真的很愚蠢。如果請求中沒有發送複選框值,爲什麼不能假定它沒有被選中?如果無論出於何種原因複選框的可見性是有條件的,*和*實際上與您的邏輯有關(我想不出爲什麼會有這種情況),爲什麼不能在後續的POST中使用相同的條件?這真的讓我感覺錯了。它是在我的CSS旁邊的兄弟選擇器上勾選複選框(以不同的方式標記它們的標籤),因爲現在我有這個只在0.5%情景中有用的隱藏字段...... Lame。 – 2010-01-07 06:24:08

+0

而且,我認爲他們得到了錯誤的默認值!我相信複選框會通過「開」,而不是「真」。 – 2010-01-07 06:25:29