因此,我有一個視圖模型調用ProductViewModel,它有一個產品可以生產的網站列表。我試圖弄清楚如何使用複選框爲用戶選擇產品可以生產的網站,在表單上顯示此信息。看起來挺直的,對吧?那麼它不工作就像我想/需要。希望有人能幫助我指導正確的做法。無法在表單上綁定html.checkbox
我的課:
public class ProductViewModel
{
public List<Sites> SiteList {get; set;}
public string ProductName {get; set;}
public int ProductId {get; set;}
public User ProductOwner{get; set;}
}
public class Sites
{
public int SiteId {get; set;}
public string SiteName {get; set;}
public bool IsSelected {get; set;}
}
我的部分觀點:
@Html.LabelFor(m=>m.Sites):
@foreach (var site in Model.Sites)
{
@Html.CheckBox("Sites", site.IsSelected, new { value = site.SiteName })
@Html.Label(site.SiteName)
}
當使用@ Html.Checkbox()我看到在HTML下面的輸出從瀏覽器:
<input checked="checked" id="Sites" name="Sites" type="checkbox" value="Miami" />
<input name="Sites" type="hidden" value="false" />
我明白隱藏的領域,但我真正需要的是獲得所選項目的價值。所以我需要找回邁阿密的名單。我不需要html助手似乎想要發送的錯誤/真實的東西(即邁阿密= true)
所以我試了這個。
@for(int id=0; id < Model.Sites.Count(); id++)
{
<input type="checkbox" id="@Model.Sites[id].SiteName" name="Sites[@id]" value="@Model.BoxingSites[id].SiteName" @(Model.Sites[id].IsSelected ? @"checked=""checked""": "") />
@Html.Label(Model.Sites[id].SiteName)
}
,輸出是:
<input type="checkbox" id="Miami" name="Sites[0]" value="Miami" checked="checked" />
<label for="Miami">Miami</label>
在這兩種情況下,我不能夠得到粘結劑張貼到行動時,表單值映射到Product.Sites列表。
的操作是這樣的:
[HttpPost]
public ActionResult Edit(ProductViewModel Product)
{
//Does something with the form data.
}
其他值(產品名稱等)映射罰款。
我在做什麼錯?我覺得我錯過了一些東西,因爲MVC簡化了很多其他形式的處理情況,這應該會更容易一些。
在此先感謝...
,你也可以使用CheckBoxList的助手從這裏http://awesome.codeplex.com/ – Omu 2011-05-20 13:11:24
@歐姆 - 感謝您的參考。這真的很棒。我也肯定會將其用於其他一些需求。 – Racter 2011-05-20 16:32:04