私はASP.Net MVC(と剃刀)にはかなり新しく、いくつか質問があります。ASP.Net MVC 3 - CheckBoxList - いくつかの提案が必要
1)
以下のように私は、チェックボックスのリストを作成するHTMLの拡張機能を作成しました:私は私の意見でこれを使用することができたとも示すように、コントローラ内の値を取得
public static HtmlString CheckBoxList(this HtmlHelper htmlHelper, string name, List<InputItemInfo> ItemInfo)
{
if (String.IsNullOrEmpty(name))
throw new ArgumentException("The argument must have a value", "name");
if (ItemInfo == null)
throw new ArgumentNullException("ItemInfo");
if (ItemInfo.Count < 1)
throw new ArgumentException("The list must contain at least one value", "ItemInfo");
StringBuilder sb = new StringBuilder();
ItemInfo.Insert(0, new InputItemInfo("*", "Select All", ItemInfo.All(i => i.IsChecked)));
foreach (InputItemInfo info in ItemInfo)
{
TagBuilder builder = new TagBuilder("input");
if (info.IsChecked) builder.MergeAttribute("checked", "checked");
builder.MergeAttribute("type", "checkbox");
builder.MergeAttribute("value", info.Value);
builder.MergeAttribute("name", name);
builder.InnerHtml = info.DisplayText;
sb.Append(builder.ToString(TagRenderMode.Normal));
sb.Append("<br />");
}
return new HtmlString(sb.ToString());
}
以下:
@model List<AppTest.Models.InputExtensionsViewModel>
@{
ViewBag.Title = "Check";
}
<h2>Check</h2>
@using (Html.BeginForm())
{
<table border="0" style="border:0px;">
<tr>
<td valign="top">
@Html.Partial("CheckBoxList", Model[0])
</td>
</tr>
</table>
<br />
<input type="submit" value="Go" />
}
<div style="font-weight:bolder">
@ViewData["data"]
</div>
コントローラ:
モデルは次のとおりです。
public class InputExtensionsViewModel
{
public string Title { get; set; }
public string InputElementName { get; set; }
public List<InputItemInfo> InputElements { get; set; }
public void SetSelected(string[] items)
{
if (items == null)
return;
this.InputElements.ForEach(delegate(InputItemInfo info)
{
if (items.Contains(info.Value))
info.IsChecked = true;
});
}
}
私の質問があり、私はInputExtensionsViewModelモデルにプロパティに配列項目をバインドすることができたことにより、方法はありますか?ビューモデルにfacilitiesというプロパティを追加するだけであれば、自動的にバインドされず、なぜ私が私のビューにバインドしていないので、私は理解できます。しかし、私はそれを行うことができる方法を考えているようには思えません。
このチェックボックスリストはユーザーコントロールであり、私はアクションメソッドにstring []配列が多すぎるのを避けたかっただけです。
[編集] - さて、私はこれを試してみることができました。それが以前にはうまくいかなかった理由はわかりません。
2)そして、私は選択肢をチェックし、SOにこの答えを見つけた:
そして、私はこれを複製することができましたが、私の質問は、私はラベルを結合しないか、ありますこのチェックボックス?私のラベルは動的でモデルの一部なので、ハードコーディングすることはできません。私はHtml.LabelForを使用しようとしていたが、うまくいかなかった。私が@ Model.Textだけであれば、それは機能しませんし、ポストバック後にはプロパティにバインドされていないので、失われてしまいます。
私はグーグルで、HTMLヘルパーを作成する提案を見つけました私は以前(私の最初の質問はそれについて)だった。
不明な点がある場合は教えてください。私は精緻化することができた。すべての入力をいただければ幸いです!
ありがとうございます!次に、あなたのテンプレートは次のようになり
public class MyViewModel
{
public int Id { get; set; }
public bool IsChecked { get; set; }
public string Text { get; set; }
}
:
しかし、この場合、@ Model.Textの出力HTMLはとしてフォーマットされません。これは望ましい出力ですか? –
これは動的テキストを表示するだけです。私は今すぐラベルステートメントを持つように即興し、次にいくつかのjqueryをチェックボックスに結びつけました。私は編集を追加します! – k25