2

問題:

列挙型に基づいてチェックボックスのリストを表示したい:例 item1[] item2[] item3[]

ただし、これらのチェックボックスは、コンマ区切りリストの内容に基づいてチェックする必要がありますmodel.platforms

例: If model.platforms= "1,3,5" の場合、ページの出力は次のようになります。

item1[x] item2[] item3[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}...
  }

- 意見 -

   @(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>
            }
4

1 に答える 1

1

次のコードを使用してそれを実現できます。

public static IHtmlString CheckboxListForEnum<T>(this HtmlHelper html, string name, T modelItems) where T : struct
{
    StringBuilder sb = new StringBuilder();

    foreach (T item in Enum.GetValues(typeof(T)).Cast<T>())
    {
        TagBuilder builder = new TagBuilder("input");
        long targetValue = Convert.ToInt64(item);
        long flagValue = Convert.ToInt64(modelItems);

        if ((targetValue & flagValue) == targetValue)
            builder.MergeAttribute("checked", "checked");

        builder.MergeAttribute("type", "checkbox");
        builder.MergeAttribute("value", item.ToString());
        builder.MergeAttribute("name", name);
        builder.InnerHtml = item.ToString();

        sb.Append(builder.ToString(TagRenderMode.Normal));
    }

    return new HtmlString(sb.ToString());
}

asp.net MVC のこの URL チェックボックス リストを参照してください。

于 2012-11-30T09:53:13.893 に答える