私はあることに頭を悩ませています (以前に尋ねられたようなことは知っていますが、まったく同じではないことは確かです)。要点: Telerik グリッドを使用したビューがあります。そのグリッドでは、ビューに渡すモデルからいくつかのものを表示しますが、最後の列に、コントローラーのいくつかのものに基づいてチェック/チェックされていないチェックボックスを配置したい(チェックはモデルとは関係ありません渡されています)。ビューを処理する ActionResult 関数では、いくつかのBoolean
値を ViewData に保存し、ViewData に保存されている値に基づいて CheckBox に isChecked 値を設定します。
ActionResult のコードは次のとおりです。
[SecureThis(Roles = "User")]
public ActionResult Index()
{
//get bucket ids
var buckets = db.Buckets.ToList();
int i=1;
string cb = "checkbox" + i.ToString();
foreach (Bucket b in buckets)
{
var payByInvoice = db.PaymentOptions.Where(p => p.BucketId == b.Id).Select(p => p.CanPayByInvoice).SingleOrDefault();
if (payByInvoice == (int)PayByInvoiceState.Accepted)
ViewData["checkbox" + i.ToString()] = true;
else ViewData["checkbox" + i.ToString()] = false;
i++;
cb = "checkbox" + i.ToString();
}
return View(db.Buckets);
}
そして、すべてのものを表示するグリッドは次のとおりです。
@{
int i=1;
string cb = "checkbox" + i.ToString();
}
@(Html.Telerik().Grid(Model)
.Name("BucketsGrid")
.DataKeys(keys => keys.Add(bucket => bucket.Id))
.Columns(
columns =>
{
columns.Template(model => ViewData[model.Id.ToString()])
.HeaderTemplate(
@<b>@Strings.Title_Customer</b>
);
columns.Bound(model => model.CreditFacility);
columns.Bound(model => model.Minimum);
columns.Bound(model => model.RefillLevel);
columns.Bound(model => model.NotificationEmail);
columns.Bound(model => model.NotificationSms);
columns.Template(model => Html.ActionLink(Strings.Edit, "Edit", new { id = model.Id }));
columns.Template(model => Html.ActionLink(Strings.NotificationOptions, "Bucket", "NotificationOptions", new { id = model.Id }, null));
columns.Template(model => Html.ActionLink("Refill", "Refill", "Payment", new { id = model.Id }, null));
columns.Template(model => Html.ActionLink(Strings.Details, "Details", new { id = model.Id }));
columns.Template(model => Html.ActionLink(Strings.Delete, "Delete", new { id = model.Id }));
columns.Template(model => Html.CheckBox("invoice", (Boolean)ViewData[@cb])).HeaderTemplate("Invoice Option");
@i++;
@cb = "checkbox" + i.ToString();
}
)
.Pageable(paging =>
paging.Enabled(true)
.PageSize(UserSettings.GridPageSize)
.Style(GridPagerStyles.NextPrevious)
.Position(GridPagerPosition.Bottom)
)
.Sortable()
.Scrollable()
.Resizable(resize=> resize.Columns(true))
)
この全体の問題は、ViewData に格納されているデータに関係なく、チェックボックスがオフのままであることです。私はデバッガーを使用し、それに応じてViewDataで値が設定されていますが、何らかの理由で(まだわかりません)、チェックボックスがオフのままです。
この問題に関するアイデアは大歓迎です。