2014-10-16 52 views
0

我想要做的是創建一個CheckBoxList屬性,以便編輯器可以選擇BO中當前頁面(酒店名稱)的特定設施,並根據檢查內容呈現內容。Umbraco:使用mvc模型的預值創建CheckBoxList屬性

我創建了一個模型:

public class Facility 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 
    public string IconUrl { get; set; } 

    public List<Facility> GetFacilities() 
    { 
     return new List<Facility>() 
     { 
      new Facility() { Id = 4, Description = "Free parking", IconUrl = "" }, 
      new Facility() { Id = 6, Description = "Spa", IconUrl = "" }, 
      new Facility() { Id = 7, Description = "Free Wifi", IconUrl = "" }, 
      new Facility() { Id = 2, Description = "Tennis", IconUrl = "" }, 
      new Facility() { Id = 9, Description = "Room service", IconUrl = "" }, 
      new Facility() { Id = 10, Description = "Fitness", IconUrl = "" } 
     }; 
    } 

}

我如何創建與GetFacilities()方法來設置值的CheckBoxList?或者我應該使用這種方法在AppCode文件夾中創建一個新類?哪裏是放置這種功能的最佳場所,我怎樣才能做到這一點?

+0

是你傳遞給您的視圖列表''和你想回來後的選擇(選中)值的模型? – 2014-10-16 11:32:57

+0

還沒有通過它,因爲我不知道如何實現孔過程。所以我應該將這個模型傳遞給視圖?以及如何使用硬編碼值創建CheckBoxList屬性(以在後端檢查它們)? – alex 2014-10-16 11:48:14

+0

你的問題的第二部分是基於意見的,但它普遍接受的觀點模型應該是愚蠢的,只包含你在視圖中顯示/編輯的屬性。我的建議是在模型中不要有'GetFacilities'方法。你放在哪裏取決於你的應用程序的結構。我假設你查看需要顯示關於酒店的一些其他信息,所以我將發佈一個專注於創建複選框並回發所選值的答案 – 2014-10-16 11:56:15

回答

1

Facility模型應該包含一個布爾值,如果它被選中

public class FacilityVM 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 
    public bool IsSelected { get; set; } 
{ 

public class HotelVM 
{ 
    public int ID{ get; set; } 
    .... 
    public List<FacilityVM> Facilities { get; set; } 
} 

控制器指示

public ActionResult Edit(int ID) 
{ 
    HotelVM model = new HotelVM(); 
    model.Facilities = // populate the list of available facilities 
    // Get the hotel from repository and map properties to the view model 
    return View(model); 
} 

public ActionResult Edit(HotelVM model) 
{ 
    ... 
    foreach(FacilityVM facility in model.Facilities) 
    { 
    if (facility.IsSelected) 
    { 
     // do something 
    } 
    } 
    .... 
} 

查看

@model HotelVM 
@using (Html.BeginForm()) 
{ 
    // render properties of hotel 
    .... 
    for (int i = 0; i < Model.Facilities.Count; i++) 
    { 
    @Html.HiddenFor(m => m.Facilities[i].ID); 
    @Html.HiddenFor(m => m.Facilities[i].Description); 
    @Html.CheckBoxFor(m => m.Facilities[i].IsSelected) 
    @Html.LabelFor(m => m.Facilities[i].IsSelected, Model.Facilities[i].Description) 
    } 
    <input type="submit" value="Save" /> 
} 
1

我想你想這個如斯蒂芬所建議的錯誤方式(除非我誤解你的問題)。您正在創建一個鍵/值對列表,並且只有一個將在BO中被選中,因此只有一個將被髮布到前端(無論是否使用它)。

因此,在BO中,您只需要一個帶有鍵/值對的下拉列表。您可以使用「下拉列表(發佈密鑰)」數據類型來創建它。另外考慮使用「SQL下拉列表」數據類型,因爲這會給你更多的靈活性。

如果您需要將所選ID轉換爲Facility對象,請使用實現IPropertyEditorValueConverter接口的類別單獨執行此操作。在這裏看到更多的信息:

http://our.umbraco.org/documentation/extending-umbraco/Property-Editors/PropertyEditorValueConverters

+0

內容編輯器應該選擇多個選項,而不僅僅是一個。將查看「SQL下拉」數據類型並返回。 – alex 2014-10-16 12:44:58

+0

您的意思是:http://our.umbraco.org/projects/backoffice-extensions/sql-dropdown-list-for-v7? – alex 2014-10-16 13:26:05

+0

我正在考慮uComponents數據類型,但我忘了它可能不會在7中工作。雖然在Umbraco 7中有一個「多個下拉列表(發佈密鑰)」。我個人會一直這樣做,直到你需要更復雜的東西。 – Digbyswift 2014-10-16 13:42:26

相關問題