Kendo UI Grid添加新记录而不将数据发布到服务器端

时间:2019-03-26 01:54:29

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

我正在研究Kendo UI jQuery网格CRUD。我可以在网格中显示数据,但不能添加新记录。

当我在弹出窗口中填充列后单击更新按钮以添加记录时,由于每个属性都有一个空值,因此没有任何内容发布到服务器端。 图片显示了按下按钮后得到的内容。

enter image description here

控制器:

scanf("%d", &ch);

JavaScript:

[HttpPost]
public JsonResult AddLostProperty(LostPropertyViewModel lostProperty)
{
    try
    {
        using (var dbContext = new DBEntities())
        {
            if (lostProperty != null)
            {
                var newLostProperty = new sz_LostProperty()
                {
                    Name = lostProperty.PropertyName,
                    CategoryId = dbContext.sz_PropertyCategory.Where(x => x.Name == lostProperty.CategoryName).Select(c => c.Id).FirstOrDefault(),
                    Description = lostProperty.PropertyDescription,
                    FoundDate = lostProperty.FoundDate,
                    FoundLocation = lostProperty.FoundLocation,
                    CratedDate = DateTime.UtcNow.Date,
                    CratedBy = ""
                };

                dbContext.sz_LostProperty.Add(newLostProperty);
                dbContext.SaveChanges();

                return Json(new { Success = true, Message = "The Property has been added." });
            }
            else
            {
                return Json(new { Success = false, Message = "No lost property added." });
            }
        }
    }            
    catch (Exception e)
    {
        return Json(new { Success = false, Message = "Error: " + e });
    }
}

从浏览器中,我可以在下面看到发送到服务器的对象:

enter image description here

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

我认为在这种情况下,服务器端的参数类型存在问题。

您已启用 batch:true 编辑,如果您要在网格中进行许多更改,但最后只发送一个请求,并且更改了模型,这将很有用。例如,在 inCell 编辑模式下,这很有用,当您看到很多请求并希望减少请求时,就可以了,但是在弹出式编辑的情况下,我个人看不到任何原因使用批处理编辑,但是是的,我知道Telerik在他们的演示中有此内容。

因此,由于启用了批处理编辑,因此在执行请求之前将调用parameterMap。 (注意:仅当您启用了批量编辑时,才会调用parameterMap,否则它将被忽略)。该parameterMap将所有模型包装到json字符串数组中,并将带有请求的数组发送到服务器。在您的情况下,总会编辑一条记录,但这没关系-它会以数组形式(以json字符串格式)发送。

因为它是作为序列化字符串发送的,所以可以

1)将AddLostProperty方法的参数更改为字符串模型,然后反序列化为数组,这使您可以像以前那样使用它

public ActionResult AddLostProperty(string models)
{
    ...
    var data = JsonConvert.DeserializeObject<IEnumerable<LostPropertyViewModel>>(models);
    ...
}

2)如果我们将遵循Telerik演示,则可以使用这种实现方式

public ActionResult AddLostProperty()
{
    var products = this.DeserializeObject<IEnumerable<LostPropertyViewModel>>("models");
    if (products != null)
    {
        //logic
    }
    return this.Jsonp(products);
}

3)这是我想要的解决方案

只需删除 batch:true parameterMap (因为没有批处理就没有用了)-它应该开始将单个对象发送到您的服务器方法。