Kendo UI Grid将null viewmodel传递给我的Controller

时间:2014-02-12 02:44:07

标签: c# asp.net-mvc kendo-ui kendo-grid

这让我很疯狂,我现在使用版本2013.1.514.340在6个以上的项目中使用了Kendo UI Grid,我从来没有遇到任何问题,但今天早上我尝试在新项目上使用更新的版本2013.2.918.340我有一个重大问题。

通过这个新项目,我有一个网格,没有什么花哨的。它的作用是代表一个名为LogTypes的数据库中的表,您可以在其中添加,编辑和删除项目。检索数据和删除方法有效,但创建方法为我提供空值

这是截图 enter image description here

另一个有趣的事情是,Update Method根本不会调用SaveOrUpdate 客户端验证也有效。

enter image description here

这是我的完整代码,我希望有人可以帮助我:(

我的视图模型

public class LogTypesPageViewModel
{
    public IList<LogTypesViewModel> LogTypes { get; set; }
}
public class LogTypesViewModel
{
    public int? LogTypeId { get; set; }

    [Required]
    public string LogTypeDescription { get; set; }

}

我的控制器

public class LogTypesController : Controller
{
private readonly ILogTypesQuery logTypesQuery;
private readonly ICommandProcessor commandProcessor;

public LogTypesController(
    ILogTypesQuery logTypesQuery,
    ICommandProcessor commandProcessor)
{
    this.logTypesQuery = logTypesQuery;
    this.commandProcessor = commandProcessor;
}

public ActionResult Index()
{           
    var viewModel = new LogTypesPageViewModel
    {
        LogTypes = logTypesQuery.GetLogTypes()
    };

    return View(viewModel);
}

public ActionResult GetLogTypes([DataSourceRequest]DataSourceRequest request)
{
    var logTypes = logTypesQuery.GetLogTypes();
    var result = logTypes.ToDataSourceResult(request);

    return Json(result);
}

[HttpPost]
[Transaction]
public ActionResult SaveOrUpdate(LogTypesViewModel viewModel, [DataSourceRequest]DataSourceRequest request)

{
    if (ModelState.IsValid)
    {
        var command = new SaveOrUpdateLogTypeCommand(
                        viewModel.LogTypeId,
                        viewModel.LogTypeDescription
                        );

        if (ModelState.IsValid)
        {
            commandProcessor.Process(command);
            viewModel.LogTypeId = command.LogTypeId;
        }
    }

    var result = new[] { viewModel }.ToDataSourceResult(request, ModelState);

    return Json(result);
}       

[HttpPost]
[Transaction]
public ActionResult Delete(int logTypeId, [DataSourceRequest]DataSourceRequest request)
{
    var command = new DeleteLogTypeCommand(logTypeId);
    commandProcessor.Process(command);

    return Json(ModelState.ToDataSourceResult());
}

我的观点

@model ViewModels.LogTypes.LogTypesPageViewModel
@{
    ViewBag.Title = "Log Types";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h1>Log Types</h1>

@(Html.Kendo().Grid(Model.LogTypes)
    .Name("grid-log-types")
    .Columns(c =>
    {
        c.Command(commands =>
        {
            commands.Edit();
            commands.Destroy();
        }).Width(150);

        c.Bound(x => x.LogTypeDescription);
        c.Bound(x => x.LogTypeId);
    }) 
    .ToolBar(commands => commands.Create()) 
    .Editable(e => e.Mode(GridEditMode.InLine))   
    .Sortable()
    .Scrollable()
    .DataSource(d => d
        .Ajax()
        .Create(create => create.Action("SaveOrUpdate", "LogTypes"))
        .Update(update => update.Action("SaveOrUpdate", "LogTypes"))
        .Destroy(destroy => destroy.Action("Delete", "LogTypes"))
        .Read(read => read.Action("GetLogTypes", "LogTypes"))
        .Model(x => x.Id(p => p.LogTypeId))
        )
)

我在做什么有什么问题吗?为什么不触发更新以及为什么Create传递空值?

更新

我也试过这个

@(Html.Kendo().Grid<ExternalUserManagement.Web.Mvc.Controllers.ViewModels.LogTypes.LogTypesViewModel>()

仍然无效

1 个答案:

答案 0 :(得分:0)

解决了!我错过了添加对

的引用
  

kendo.web.min.js