2013-07-18 91 views
2

我有一個視圖,將文本框和複選框的數據從用戶點擊提交時發回並保存到我的數據庫。當視圖第一次加載時,一些文本框會從用戶的數據庫中加載數據,我也希望某些複選框也被預先檢查。以下是我有我的Get方法至今:我應該使用Html.CheckBox還是Html.CheckBoxFor?

//vm is an object of my ViewModel 
    [HttpGet] 
    public ActionResult AddOrganization(int peopleID = 0) 
    { 
     var peopleModel = db.People.Include("EmployeeContacts").Single(g => g.PeopleID == peopleID); 
     var contactModel = db.EmployeeContacts.Include("People").Single(g => g.PeopleID == peopleID); 
     vm.People = new People(); 
     vm.EmployeeContacts = new EmployeeContacts(); 
     vm.OrganizationsOptions = new OrganizationOptions(); 

     // grabs info from db to be populated in the view 
     vm.People.NID = peopleModel.NID; 
     vm.People.FirstName = peopleModel.FirstName; 
     vm.People.LastName = peopleModel.LastName; 
     vm.People.SID = peopleModel.SID; 
     vm.EmployeeContacts.Email = contactModel.Email; 
     vm.EmployeeContacts.PrimaryPhone = contactModel.PrimaryPhone; 

     var list = new List<AddOrganizationViewModel> 
     { 
      new AddOrganizationViewModel{ID = 1, Name = "Admin", AdminChecked = true}, 
      new AddOrganizationViewModel{ID = 2, Name = "Breakdown Report", BreakdownReportChecked = true}, 
      new AddOrganizationViewModel{ID = 3, Name = "Favorites", FavoritesChecked = true}, 
      new AddOrganizationViewModel{ID = 4, Name = "Site Admin", SiteAdminChecked = false}, 
     }; 

     return View("../Setup/AddOrganization", vm); 
    } 

我的視圖模型是這樣的:

public class AddOrganizationViewModel 
    { 
     public Music.Models.Organizations Organizations { get; set; } 
     public Music.Models.People People { get; set; } 
     public Music.Models.OrganizationOptions OrganizationsOptions { get; set; } 
     public Music.Models.EmployeeContacts EmployeeContacts { get; set; } 
     public int ID { get; set; } 
     public string Name { get; set; } 
     public bool AdminChecked { get; set; } 
     public bool BreakdownReportChecked { get; set; } 
     public bool FavoritesChecked { get; set; } 
     public bool SiteAdminChecked { get; set; } 
    } 

這是我認爲包含複選框的一部分,但我m不知道我需要在這裏做什麼來將ViewModel,Controller和View鏈接在一起,因爲視圖需要一種AddOrganizationViewModel類型,所以我一直在如何發送複選框列表。

@model Music.ViewModels.AddOrganizationViewModel 

@using (Html.BeginForm("AddOrganization", "AddOrganization")){ 
@Html.AntiForgeryToken() 
<legend>OPTIONS</legend> 
<div> 
    @Html.Label("Features: Admin") 
    @Html.CheckBoxFor(Model => Model.AdminChecked) 
</div> 
<div> 
    @Html.Label("Features: Breakdown Report") 
    @Html.CheckBoxFor(Model => Model.BreakdownReportChecked) 
</div> 
<div> 
    @Html.Label("Features: Favorites") 
    @Html.CheckBoxFor(Model => Model.FavoritesChecked) 
</div> 
<div> 
    @Html.Label("Features: Site Admin") 
    @Html.CheckBoxFor(Model => Model.SiteAdminChecked) 
</div> 
} 

編輯:更新代碼以反映我使用CheckBoxFor所做的更改。

回答

1

您不應該爲您的所有複選框使用1個通用屬性。

我只想在我的viewmodel中爲你希望用戶有權訪問的每個功能創建一個布爾屬性。

public class AddOrganizationViewModel 
    { 
     public Music.Models.Organizations Organizations { get; set; } 
     public Music.Models.People People { get; set; } 
     public Music.Models.OrganizationOptions OrganizationsOptions { get; set; } 
     public Music.Models.EmployeeContacts EmployeeContacts { get; set; } 
     public int ID { get; set; } 
     public string Name { get; set; } 
     public bool HasAdminPermissions{ get; set; } 
     public bool HasSomeOtherPermission{ get; set; } 
     //etc.. for other checkboxes you might need. 
    } 

預填這些複選框,設置它們在你的控制器與我們在視圖模型創建的屬性:

vm.HasSomeOtherPermission = true; 
//etc for other properties 

最後在你看來,改變@Html.CheckBox@Html.CheckBoxFor。 然後,您可以只使用在視圖模型的boolen性能呈現複選框:

<legend>OPTIONS</legend> 
@*Look into @html.checkboxfor *@ 
<div> 
    @Html.Label("Features: Admin") 
    @Html.CheckBoxFor(x => x.HasAdminPermissions) 
</div> 
<div> 
    @Html.Label("Features: Breakdown Report") 
    @Html.CheckBoxFor(x => x.HasSomeOtherPermission) 
</div> 
+0

你的意思是'CheckBoxFor(X => x.HasAdminPermissions)'? –

+0

@尼克是啊,只是注意到:) – Thousand

+0

感謝千人,我改變了我的觀點,就像你說的,並使用@ Html.CheckBoxFor指令,但所有的複選框仍然未經檢查。我不需要做一些事情將列表發送到視圖,或者由於它是AddOrganizationViewModel類型而自動發生? – SantasNotReal

相關問題