2016-09-08 4 views
0

Я собираюсь создать веб-страницу для управления моими пользователями с помощью ASP.NET MVC Kendo Grid. Когда я нажимаю кнопку «Добавить» в «Кендо-сетке», ничего не происходит, и кнопка не работает. Как я могу решить проблему?ASP.NET MVC Kendo Grid Добавить новое с помощью всплывающего окна

Вот мой UserViewModel класс:

public class UserViewModel 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 

    [ScriptIgnore] 
    public byte[] Photo { get; set; } 
    public string Photo64 
    { 
     get 
     { 
      return Photo != null ? Convert.ToBase64String(Photo) : null; 
     } 
    } 

    public bool Leave { get; set; } 
} 

Вот мой читать и создавать действия:

public ActionResult Users_Read([DataSourceRequest]DataSourceRequest request) 
{ 
    using (var db = new DBEntities()) 
    { 
     var users = from u in db.Users 
        select new UserViewModel 
        { 
         Id = u.Id, 
         Name = u.Name, 
         Photo = u.Photo, 
         Leave = u.Leave ?? false 
        }; 
     DataSourceResult result = users.ToDataSourceResult(request); 
     return Json(result); 
    } 
} 

public ActionResult Users_Create([DataSourceRequest]DataSourceRequest request, UserViewModel user) 
{ 
    if (ModelState.IsValid) 
    { 
     using (var db = new DBEntities()) 
     { 
      var entity = new User 
      { 
       Name = user.Name 
       Photo = user.Photo, 
       Leave = user.Leave 
      }; 

      db.Users.Add(entity); 
      db.SaveChanges(); 
      user.Id = entity.Id; 
     } 
    }     
    return Json(new[] { user }.ToDataSourceResult(request, ModelState)); 
} 

Вот мой Вид:

@(Html.Kendo().Grid<MyApp.Models.User>() 
       .Name("grid") 
       .Columns(c => 
       { 
        c.Bound(u => u.Id).Visible(false); 
        c.Bound(u => u.Photo).ClientTemplate(
         "# if (Photo64 == null) { #" + 
          "<img src='" + Url.Content("~/Images/") + "no_profile_photo.jpg' />" + 
         "# } else { #" + 
          "<img src='data:image/jpg;base64,#=Photo64#' />" + 
         "# } #" 
        ); 
        c.Bound(u => u.Name); 
        c.Bound(u => u.Leave).ClientTemplate(
         "<input type='checkbox' onclick='return false' value='#= Id #' " + 
          "# if (Leave) { #" + 
           "checked='checked'" + 
          "# } #" + 
         "/>" 
        ); 
        c.Command(cmd => { cmd.Edit(); cmd.Destroy(); }); 
       }) 
       .ToolBar(toolbar => toolbar.Create()) 
       .Editable(editable => editable.Mode(GridEditMode.PopUp)) 
       .DataSource(dataSource => dataSource 
        .Ajax() 
        .Model(m => 
        { 
         m.Id(user => user.Id); 
         m.Field(user => user.Name); 
         m.Field(user => user.Photo); 
         m.Field(user => user.Leave); 
        }) 
        .Create(create => create.Action("Users_Create", "User")) 
        .Read(read => read.Action("Users_Read", "User")) 
        .Update(update => update.Action("Users_Update", "User")) 
        .Destroy(destroy => destroy.Action("Users_Destroy", "User")) 
       ) 
       .Pageable() 
       .Sortable() 
       .Filterable() 
) 
+1

Метод Users_Read возвращает источник данных типа UserViewModel, но тогда вы определили свою сетку как тип Grid . Это вызывает у вас проблемы? –

+1

Да. Ты прав. Спасибо. Решаемые. – Mohsen

+0

, пожалуйста, задайте мой ответ как решение :) –

ответ

1

Ваш метод Users_Read возвращает кендо datasource типа UserViewModel, но тогда сетка определяется как тип Grid < MyApp.Models.Us er >, который вызывает ошибку.

Смежные вопросы