2012-08-09 61 views
2

我需要在窗體上顯示一些複選框,用戶可以檢查儘可能多的希望。MVC3通過字典<string,bool>從視圖到控制器

因此,我在數據庫中存儲複選框選項。 (必填)

型號

public class Options 
{ 
    public int OptionsId {get; set;} 
    public string Option {get; set;} 
} 

在視圖模型,

IEnumerable<Options> listCheckBoxOptions {get; set;}// store list of options from database 
Dictionary<string,bool> checkboxs {get; set;} // store if is check or not 

所以在我要存儲在此複選框值(真/假)的觀點checkboxs字典。

@foreach (var x in Model.listCheckBoxOptions) 
    {     
      @Html.CheckBoxFor(m => m.checkboxs[x.Option]) 
      @m.Option <br />        
    } 

所以,當我提交表單...複選框爲空時,獲取到控制器。

任何想法爲什麼?

+0

我覈對物品IsSelected屬性值對不起,我無法理解:視圖是否正確顯示,但是當您發佈視圖時,您將丟失複選框的值? – 2012-08-09 03:35:31

+0

是的,我在foreach循環創建的視圖上有3個複選框。所以,如果我檢查兩個框併發布到控制器。當我檢查控制器上的複選框變量時,它是空的(根本沒有)基本上我想讓控制器像這樣複選框[Option1] = true,複選框[Option2] = false,複選框[Option3] = true。取決於用戶檢查哪個複選框。我相信,它必須做我如何格式的HTML,所以我認爲它必須做與生成複選框的HTML foreach循環。 – Valter 2012-08-09 03:49:38

回答

1

您的選擇將會顯示這樣的名字,如checkboxs[key here]及身份證號碼checkboxs_key_here_。 MVC不知道如何將它們綁定回去。

看一看這個線程,我就在幾天前回答:Generating an MVC3 RadioButton list in a loop statement

這是同樣的事情,只是用單選按鈕代替的複選框。

+0

非常感謝。 – Valter 2012-08-09 04:02:23

+1

單選按鈕不允許多選。 – Dwayne 2014-03-18 01:27:26

1

使用編輯模板

多了一個屬性添加到您的視圖模型。爲了更好的可讀性,我將名稱從多個更改爲單數(選項選項

public class Option 
{ 
    public int OptionId {get; set;} 
    public string Option {get; set;} 
    public bool IsSelected { set;get;} 
} 

而主要的ViewModel,

public class CustomerViewModel 
{ 
    public IEnumerable<Option> OptionList { set;get;} 
    public CustomerViewModel() 
    { 
    OptionList=new List<Option>(); 
    } 
} 

創建視圖Views/YourControllerName下稱爲Option.cshtml夾。

有這個內容。

@model Option 
@{ 
    Layout = null; 
} 
<p> 
@Html.CheckBoxFor(x => x.IsSelected) 
@Html.LabelFor(x => x.IsSelected, Model.Option) 
@Html.HiddenFor(x => x.OptionId) 
</p> 

,並在主窗體,調用它

@model YourViewModel 
@using(Html.BeginForm()) 
{  
    @Html.EditorFor(m=>m.OptionList) 
    <input type="submit" value="Save" /> 
} 

現在,在您POST動作,你可以在OptionList財產

[HttpPost] 
public ActionResult Edit(CustomerViewModel model) 
{ 
    foreach(var opt in model.OptionList) 
    { 
     //check for model.IsSelected value for each item 
    } 
} 
相關問題