これは最近約another question I askedに関連しています。ユーザーロール情報をグリッドにバインドしようとしており、ユーザーにロールを割り当てています。各ユーザーはデータベース内で複数の役割を持つことができ、これらは剣道UI MultiSelectを使用して編集する必要があります。剣道MultiSelectを剣道UIグリッドでASP.NET MVCで使用する
必要なロールを選択してコントローラにポストバックすると、「RoleBasicModel」オブジェクトの配列には必要なロール数が含まれますが、すべてのプロパティは空です。
モデルは次のように定義されています
public class UserInfo
{
public string UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string UserName { get; set; }
public string Roles { get; set; }
public IEnumerable<RoleBasicModel> RoleList { get; set; }
}
public class RoleBasicModel
{
public string Id { get; set; }
public string Text { get; set; }
}
グリッドはよう設定です:
@(Html.Kendo().Grid<Models.UserInfo>()
.Name("userGrid")
.Columns(columns =>
{
columns.Bound(p => p.UserName);
columns.Bound(p => p.FirstName);
columns.Bound(p => p.LastName);
columns.Bound(p => p.Roles).EditorTemplateName("RoleListEditor").Template(p => p.RoleList);
columns.Command(command => { command.Edit(); command.Destroy(); });
})
.Filterable()
.Sortable()
.Resizable(r => r.Columns(true))
.Editable(editable => { editable.Mode(GridEditMode.InLine); editable.DisplayDeleteConfirmation("Are you sure you want to remove this user?"); })
.HtmlAttributes(new { style = "min-height:90px;max-height:450px;" })
.DataSource(dataSource => dataSource
.Ajax()
.Events(events => events.Error("error_handler"))
.Model(model =>
{
model.Id(p => p.UserId);
model.Field(p => p.UserId).Editable(false);
model.Field(p => p.FirstName).Editable(true);
model.Field(p => p.LastName).Editable(true);
model.Field(p => p.UserName).Editable(false);
model.Field(p => p.RoleList).Editable(true);
}
).Read(read => read.Action("GetAllUsers", "Admin").Type(HttpVerbs.Get))
.Update(update => update.Action("UpdateUser", "Admin").Type(HttpVerbs.Post))
.Destroy(update => update.Action("DeleteUser", "Admin").Type(HttpVerbs.Post))
)
)
そして剣道複数選択を使用して、私のエディタのテンプレートは、次のように定義されます
@Html.Kendo().MultiSelect().Name("RoleList").DataTextField("Text").DataValueField("Id").BindTo((IEnumerable<Models.RoleBasicModel>)ViewData["uroles"]).Placeholder("No role selected")
サーバーに返信されたデータが空であるという明らかな理由はありますか?私は使用する正しいモデルを定義するMultiSelectコントロールから何かが欠けていると思っています。私はthe test projectに言及しましたが、これはよく似たような質問に対する答えとして引用されていますが、私はそれにも喜んでいませんでした。要求されたよう
、(の要約版)私が使用しているコントローラ:
public ActionResult ManageUsers()
{
PopulateRoles();
return View();
}
private void PopulateRoles()
{
ViewData["uroles"] = new ApplicationDbContext().Roles.Select(r => new RoleBasicModel { Text = r.Name, Id = r.Id }).ToList();
}
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult GetAllUsers([DataSourceRequest]DataSourceRequest request)
{
using (var context = new ApplicationDbContext())
{
var allUsers = context.Users.ToList().Select(x =>
new UserInfo
{
UserName = x.UserName,
UserId = x.Id,
FirstName = x.FirstName,
LastName = x.LastName,
RoleList = x.Roles.Select(p => new RoleBasicModel { Text = p.Role.Name, Id = p.RoleId }),
Roles = string.Join(", ", x.Roles.Select(p => p.Role.Name).ToList())
}).ToList();
return Json(allUsers.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult UpdateUser([DataSourceRequest] DataSourceRequest request, UserInfo user)
{
if (user != null && ModelState.IsValid)
{
using (var context = new ApplicationDbContext())
{
// Do something with the user details
}
}
return Json(new[] { user }.ToDataSourceResult(request, ModelState));
}
編集:サーバーにポストバックされたデータを表示する際に選択したオブジェクトの配列がにISNかのように、それが表示されます正しく解析されませんでした。形式はRoleList [0] .Id:123456である必要がありますが、代わりにRoleList [0] [Id]:123456です。私はこれがMultiSelectコントロールの問題ではなく、私が書いたコードではないかと思っていますか?
(あなたが剣道グリッドを使用している場合)、サーバーに投稿する前に剣道複数選択、自分の内部データをシリアライズ?私たちに馬鹿を与えてください!:) – loxdog
私はあなたに同じ質問をすることができました。 – tnw
誤って入力!スタック上で私が前にした正直な間違い... – loxdog