网格中的剑道日历

时间:2012-10-17 12:57:12

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

您好我使用Kendo网格编辑价目表。

我正在尝试编辑表格中的单个值:

@(Html.Kendo().Grid(Model).Name("PriceList")
    .Columns(columns =>
    {
        columns.Bound(p => p.Id).Hidden();
        columns.Bound(p => p.Name);
        columns.Bound(p => p.ValidFrom).Format("{0:dd.MM.yyyy h:mm:ss}");
        columns.Bound(p => p.ValidTill).Format("{0:dd.MM.yyyy h:mm:ss}");
        columns.Bound(p => p.Created).Format("{0:dd.MM.yyyy h:mm:ss}");
        columns.Bound(p => p.UserName);
        columns.Bound(p => p.FilePath);
        columns.Command(command => { command.Edit(); command.Destroy(); });
    })
    .DataSource(dataSource => dataSource.Ajax()
            .Model(model =>
            {
                model.Id(p => p.Id);
                model.Field(p => p.ValidFrom).Editable(false);
                model.Field(p => p.ValidTill).Editable(true);
                model.Field(p => p.Created).Editable(false);
                model.Field(p => p.UserName).Editable(false);
                model.Field(p => p.FilePath).Editable(false);
                model.Field(p => p.Name).Editable(false);
        })
        .Read("PriceList_Read", "Admin")       
        .Destroy("PriceList_Editing_Destroy", "Admin")
        .Update(update=>update.Action("PriceList_Editing_Update", "Admin"))
        .Events(e=>e.Error("error_handler"))
    )   
    .Editable(editable => editable.Mode(GridEditMode.InLine))
    .AutoBind(true)
)

我遇到麻烦将网格中的编辑值传递给我的控制器:

public ActionResult PriceList_Editing_Update([DataSourceRequest] DataSourceRequest request, PriceListViewModel model)
        {

                    int Id = model.Id;
                    string Name = model.Name;
                    DateTime date = model.ValidTill; // 0001 00:00:00 value all the time

            return View("Index", GetViewResult());
        }

我总是返回空的日期时间值(空是我的意思是{1. 1. 0001 0:00:00})同样的问题是使用DateTime属性(Created和ValidFrom)的其他2个列。其余值将正确回发。我试图使用string DateTillStr = Request.Params["ValidTill"];来获取这些值,但是如果我在firebug中检查我的GET,我可以看到网格没有在请求内发回这个值,它只发送我的模型对象的NON Datetime值。像这样:

Actual  false
FilePath    D:\Projects\CPSkla\CPSkla\App_Data\Cen°k 2012_10.xlsx
Id  23
Name    Testovací ceník
User    0
User1   null
UserName    djezek

没有更多的东西,只有我遗漏的这7个属性从我的模型中得到4个:

public partial class PriceListView
{
    public int Id { get; set; }
    public int User { get; set; }
    public string Name { get; set; }
    public System.DateTime ValidFrom { get; set; }
    public System.DateTime ValidTill { get; set; }
    public string FilePath { get; set; }
    public Nullable<System.DateTime> Created { get; set; }
    public Nullable<System.DateTime> Updated { get; set; }
    public bool Actual { get; set; }
    public string UserName { get; set; }
}

还有其他方法可以发回这些数据吗?我发现我可以将附加数据附加到更新请求,但我有一个问题如何在javascript函数中识别表中已编辑的行(我知道如何识别所选值但未编辑)。

我发现使用firebug,kendo网格内的日历选择器并非实际上将其选定值放入指定为保持日期值的输入中。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

使用网格的save事件 - 您可以看到从输入字段,模型(dataItem)收集的实际值以及使用HTML元素的事件,就像输入元素的容器一样。

此外,如果您想发送其他值(或者只是以不同的方式发送有问题的字段,请使用更新配置的data功能。)

答案 1 :(得分:1)

如果我的记忆对我有用,我认为这是一个有日期和时间的文化问题,并不是针对Kendo UI而是针对ASP.NET MVC。

因此,例如,如果预期日期格式字符串为mm / dd / yyyy且日期以dd / mm / yyyy进入,则您将获得空日期值(0001 00:00:00)

参见此SO问题

MVC DateTime binding with incorrect date format

希望这会有所帮助