asp mvc Поле идентификатора кендо трилист не является первичным ключом, как обновить? - PullRequest
0 голосов
/ 07 марта 2020

Моя таблица данных содержит несколько древовидных структур списков, отсортированных по UserGroupID, поля имеют следующий вид:

PKID (первичный ключ), PK_ID (дочерний идентификатор), PK_ParentID (родительский идентификатор), UserGroupID, TextField.

Когда я выбираю один из UserGroupID из выпадающего списка, Kendo Treelist может отображать список дерева соответственно. Но когда я хочу обновить TextField, это кажется противоречивым. Так как model.id - это дочерний идентификатор, а не первичный ключ. Если я использую первичный идентификатор в качестве model.id, древовидный список не может соответствовать иерархической структуре. Я попытался использовать обновление SQLstring с помощью комбинированных ключей PK_ID и UserGroupID на стороне сервера, но модель ничего не возвращает, а ModelState.IsValid имеет значение false.

Есть ли какое-либо простое решение для работы около? заранее спасибо. Вот кодекс. Вид

@(Html.Kendo().TreeList<WebApplication1.Models.SYS_MenuGroup>()
                            .Name("treelist")
                            .AutoBind(false)  //prevents initial binding
                            .Toolbar(tb =>
                            {
                                tb.Save();
                                tb.Cancel();
                            })
                            .Columns(co =>
                            {
                                co.Add().Field(e => e.PKID);
                                co.Add().Field(e => e.PK_ID);
                                co.Add().Field(e => e.PK_GroupID);
                                co.Add().Field(e => e.TextField);
                                co.Add().Field(e => e.Checked);
                            })
                            .Editable(e => e.Mode(TreeListEditMode.InCell).Move(false))
                            .DataSource(datasource => datasource
                             .Batch(true)
                             .Read(read => read.Action("MenuGroup_Read", "SYS_MenuGroup"))
                             .Create(create => create.Action("Create", "SYS_MenuGroup"))
                             .Update(update => update.Action("Update", "SYS_MenuGroup"))
                             .Destroy(destroy => destroy.Action("Destroy", "SYS_MenuGroup"))
                             .Model(m =>
                             {
                                 m.Id(f => f.PK_ID);
                                 m.ParentId (f => f.ParentID).DefaultValue(0);
                                 m.Field(f => f.PKID).Editable(false);
                                 m.Field(f => f.PK_ID).Editable(false);
                                 m.Field(f => f.PK_GroupID).Editable(false);
                                 m.Field(f => f.TextField).Editable(false);
                                 m.Field(f => f.Checked);
                             })
                             )
)

Контроллер

  public ActionResult Update([DataSourceRequest] DataSourceRequest request, SYS_MenuGroup myMenuGroup)
    {
        if (ModelState.IsValid)    ----return false, and all fields return null value
        {
            using (var db = new BaseModel())
            {
                var entity = new SYS_MenuGroup
                {
                     PK_GroupID= myMenuGroup.PK_GroupID,
                      PKID=myMenuGroup.PKID,
                       Checked=myMenuGroup.Checked
                };
                db.SYS_MenuGroup.Attach(entity);
                db.Entry(entity).State = EntityState.Modified;
                db.SaveChanges();
            }
        }

        return Json(new[] { myMenuGroup }.ToDataSourceResult(request, ModelState));
    }
...