我想顯示根據枚舉複選框列表: 例如ITEM1 [] ITEM2 []項目3 []
然而這些複選框需要基於一個逗號分隔列表model.platforms
的內容例如被檢查: 如果model.platforms
= 「1,3,5」,則頁面上的輸出應該是:
物品1 [X] ITEM2 []項目3 [X] ITEM4 [] ITEM5 [X]
我迄今所做的: 到目前爲止,我已經嘗試創建一個自定義的助手,它接受枚舉類型和我的「model.platforms。目標是在逗號分割平臺,然後在迭代枚舉時,如果枚舉的value
位於列表中,請選中該複選框。
我是否正在接近這個權利?我知道我的MVC/C#的方式,但這些幫助者對我來說確實是新手。任何指導,指向我在正確的方向,將不勝感激
我曾試圖查找SO的各種解決方案,但其中大部分圍繞枚舉是模型的一部分,這對我來說是不實際的,由於這樣的模型,來生成(我真的不希望添加視圖模型此特定情形)
代碼到目前爲止
--helper.cs--
public static MvcHtmlString PlatformList<enumType>(this HtmlHelper htmlHelper, string platformList)
{
List<string> selectedPlatforms = platformList.Split('/').ToList(); //This will come from model.platforms ("platform1/platform2/etc")
TagBuilder tg = new TagBuilder("div");
string innerhtml = "";
foreach (var item in Enum.GetValues(typeof(enumType)))
{
innerhtml = innerhtml + "{build up here}";
}
tg.SetInnerText(innerhtml);
return new MvcHtmlString(innerhtml);
}
--Enum。 cs--
public enum en_GamePlatforms
{
[Display(Name = "PC")]
PC =1,
[Display(Name = "DOS")]
DOS = 2,
...{etc}...
}
--View--
@(Html.Raw(Html.PlatformList<MagpieEnumerations.en_GamePlatforms>(Model.Platform).ToString()))
下面是我原來的做法,我實在不喜歡,但提供的頁面上的正確的輸出。(但不它關閉枚舉名稱而不是值:())
@{
List<string> platformsActive = Model.Platform.Split(',').ToList();
}
@foreach (myenums.en_GamePlatforms item in Enum.GetValues(typeof(myenums.en_GamePlatforms)))
{
<span>
@Html.Label("SelectedPlatform" + item, Enum.GetName(typeof(myenums.en_GamePlatforms), item))
@{bool t = platformsActive.Contains(item.ToString(Model));}
<input name="Selectedtypes" id="Selectedtypes" type="checkbox" @(t ? "checked='checked'" : "") value="@item"/> |
</span>
}
這是非常有用的,我就以此爲模板,但不得不取出功能部分,因爲這類型將始終使用一定的枚舉。 +1! –
JustAnotherDeveloper