2012-04-12 43 views
2

我在我的MVC3網站中有一個簡單的表單,允許用戶創建一個比賽條目。目前已經實施並且工作良好,但是現在已經提出了允許用戶使其條目保密的請求。ASP.net MVC3獲取HTML表單中的複選框值

在我的Entry模型中,我添加了一個布爾isPrivate。然後我想我會改變HTML表單的創建和編輯,以包含一個複選框來指定條目是否應該是私有的。

我是新來的MVC3,但我想我可以簡單地通過包含一個新的布爾參數來改變表單發佈到的動作。

這不幸似乎不工作。任何人都可以告訴我如何複選框值從HTML表單傳遞到後操作?這可能是相當常見的,但我似乎無法在網絡上找到此示例。幾乎所有的例子都有簡單的顯示文本輸入,我找不到任何複選框。

形式:

 <form method="post" action="../Entry/Create" enctype="multipart/form-data" onsubmit="return isValidInput()"> 
      <input type="text" id="EntryTitle" name="EntryTitle" /> 
      <div id="invalidTitle" class="invalidData"></div> 
      <p id="char-remaining">(100 characters remaining)</p> 

      <input type="text" id="EntryVideo" name="EntryVideo" /> 
      <div id="invalidVideo" class="invalidData"></div> 
      <p id="vid-desc">(URL of the Video to Embed)</p> 

      <input type="file" id="ImageFile" name="ImageFile" /> 
      <div id="invalidImage" class="invalidData"></div> 
      <p id="file-desc">(200x200px, jpeg, png, or gif)</p> 

      <textarea id="EntryDesc" name="EntryDesc"></textarea> 
      <div id="invalidDesc" class="invalidData"></div> 
      <br /> 

      <input type="checkbox" id="isPrivate" name="isPrivate" /> 
      Make my entry private. 

      <br /> 

      (private entries will only be viewable by you and site administrators) 

      <br /> 


      <button id="new-entry-save">save</button> 
     </form> 

操作:

public ActionResult Create(string EntryTitle, string EntryVideo, HttpPostedFileBase ImageFile, string EntryDesc, Boolean isPrivate) 
{ 
... 
} 
+0

如果您在操作簽名中設置了isPrivate字符串,會發生什麼情況? – SouthShoreAK 2012-04-12 21:41:19

+0

爲什麼不使用HTML-Helper:<%= Html.Checkbox(「isPrivate」)%>?它會自動創建一個隱藏字段,以防您不選中該框。 – Pbirkoff 2012-04-12 21:53:03

回答

2

附加價值= 「true」 以複選框後也將其添加隱藏的輸入具有相同的名稱和值=假,即:

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

如果你不想使用隱藏,使用bool?而不是bool(例如,可爲空)

+0

未選中時,即使值爲「true」,表單發佈時也會顯示服務器錯誤。我應該使用布爾值作爲我的動作參數isPrivate,還是別的? – Danny 2012-04-12 21:50:16

+0

我編輯了我的答案,對不起,忘記了您的案例中所需的隱藏字段 – Artem 2012-04-12 21:53:27

+0

現在很酷的作品。所以當表單發佈時它只是忽略了第二個是私人輸入,如果第一個被檢查?我預料它會通過最後一個isPrivate值。 – Danny 2012-04-12 22:18:13

2

另一種選擇是使隱藏文本字段具有相同的名稱,以強制未經檢查的字段中的數據成爲帖子的一部分。見Post the checkboxes that are unchecked

<form> 
    <input type='hidden' value='0' name='selfdestruct'> 
    <input type='checkbox' value='1' name='selfdestruct'> 
</form>