我的剑道网格正在重复记录

时间:2014-08-29 07:56:05

标签: kendo-grid

我的应用程序中有一个kendo gri。

这是一张照片。

enter image description here

这是代码

@(Html.Kendo().Grid<TekstenViewModel.Tekst>()
    .Name("Grid")
    .Columns(columns =>
    {
        columns.Template(@<text></text>).ClientTemplate("<input type='checkbox'/>").Width(10).Hidden(!Model.Administrator);

        columns.Bound(product => product.RESOURCE_SET_NAAM).ClientTemplate("#= RESOURCE_SET_NAAM#");

        columns.Bound(product => product.Naam).ClientTemplate("#= Naam#");

        columns.Bound(product => product.Waarde).ClientTemplate("<div id='editorDiv'><div class='input'>#if(Waarde){# #if(Waarde.length>100){# # var myContent =Waarde; #  # var dcontent = myContent.substring(0,100); # <span>#=kendo.toString(dcontent)#</span> #}else{# <span>#=Waarde#</span> #}# #}#</div><div class='editor'>" +
            Html.WebCore().LinkButton(type: ButtonType.Edit, htmlAttributes: new { onclick = "openPopupDemo('#: Waarde #', '#: ID #', 'Waarde')" }));

        columns.Bound(product => product.Opmerking).ClientTemplate("<div id='editorDiv'><div class='input'>#if(Opmerking){# #if(Opmerking.length>100){# # var myContent =Opmerking; #  # var dcontent = myContent.substring(0,100); # <span>#=kendo.toString(dcontent)#</span> #}else{# <span>#=Opmerking#</span> #}# #}#</div><div class='editor'>" +
            Html.WebCore().LinkButton(type: ButtonType.Edit, htmlAttributes: new { onclick = "openPopupDemo('#: Opmerking #', '#: ID #', 'Opmerking')" }));

        columns.Template(@<text></text>).ClientTemplate("<div id='deleteDiv'><div class='delete'><a class=\"delete iconBtn\" onclick=\"deleteResourceItem(#: ID #, '#: Naam #')\"></a></div></div>").Width(10).Hidden(!Model.Administrator);
    })
    .Pageable()
    .Sortable()
    .Filterable()
        .Events(events => events.Edit("onCellEdit").DataBinding("onDataBinding").DataBound("onDataBound"))
    .Groupable()
    .Resizable(a => a.Columns(true))
    .Navigatable()
    .Editable(editable => editable.Mode(GridEditMode.InCell).DisplayDeleteConfirmation(false))
    .DataSource(dataSource => dataSource
        .Ajax()
        .Batch(true)
        .Events(e => e.Error("error_handler"))
        .Model(model =>
        {
            model.Id(product => product.ID);
            model.Field(product => product.Naam).Editable(Model.Administrator);
            model.Field(product => product.Opmerking).Editable(Model.Administrator);
            model.Field(product => product.Waarde).Editable(!Model.ReadOnly);
            model.Field(product => product.RESOURCE_SET_ID).DefaultValue(Model.SetID);
            model.Field(product => product.Type).DefaultValue(Domain.Agromilieu2.Common.Objects.Entities.Resources.ResourceType.GLOBAL_RESOURCES);
            model.Field(product => product.Taal).DefaultValue(Domain.Agromilieu2.Common.Agromilieu2Constants.Resources.DEFAULT_TAAL_CODE);
        })
        .Create(create => create.Action(MVC.BeheerTeksten.ActionNames.ResourceItems_Create, MVC.BeheerTeksten.Name).Data("onCreateAdditionalData"))
        .Read(read => read.Action(MVC.BeheerTeksten.ActionNames.ResourceItems_Read, MVC.BeheerTeksten.Name, new { setID = Model.SetID }).Data("onReadAdditionalData"))
        .Update(update => update.Action(MVC.BeheerTeksten.ActionNames.ResourceItems_Update, MVC.BeheerTeksten.Name).Data("onAdditionalData"))
        .Destroy(destroy => destroy.Action(MVC.BeheerTeksten.ActionNames.ResourceItems_Delete, MVC.BeheerTeksten.Name))
        )
)

除非我创建新记录,否则网格工作正常。它调用方法创建,保存数据库中的记录等,没问题。

但是当我返回视图时,我刚添加的记录显示为插入表格中的第一条记录的副本。

是的,我知道这听起来很奇怪,但这是真的。我尝试了几次不同的值,但我总是得到相同的结果。

每条新记录都显示为添加到网格中的第一条记录的副本。当然,如果我刷新页面,数据是正确的。

这是一个例子。 添加新记录之前的网格。

enter image description here

插入新记录后的网格。

enter image description here

最后,保存更改后,我明白了。如果我刷新页面,数据是正确的。

enter image description here

这是我的创建方法。

[AcceptVerbs(HttpVerbs.Post)]
        [Domain.BasisArchitectuur.Framework.MVC.ActionFilters.MenuItem("Teksten")]
        [IsAgromilieuActieAllowed(ActieClaims.TekstenBeheren)]
        public virtual ActionResult ResourceItems_Create([DataSourceRequest]DataSourceRequest request, [Bind(Prefix = "models")]IEnumerable<TekstenViewModel.Tekst> resourceItems, long setID, string toepassingsCode)
        {
            List<ResourceItemDto> entities = new List<ResourceItemDto>();

            if (ModelState.IsValid && SecurityHelper.IsActieAllowed(ActieClaims.TekstenBeheren))
            {
                try
                {
                    using (IProxy<IResourceService> proxy = _proxyFactory.Create<IResourceService>())
                    {
                        foreach (TekstenViewModel.Tekst tekstenViewModel in resourceItems)
                        {
                            ResourceItemDto resourceItem = new ResourceItemDto
                            {
                                ResourceItem_ID   = tekstenViewModel.ID,
                                ResourceSet_ID    = setID,
                                Naam              = HttpUtility.HtmlDecode(tekstenViewModel.Naam),
                                Opmerking         = HttpUtility.HtmlDecode(tekstenViewModel.Opmerking),
                                Waarde            = HttpUtility.HtmlDecode(tekstenViewModel.Waarde),
                                Type_Code         = tekstenViewModel.Type,
                                Taal_Code         = tekstenViewModel.Taal,
                                ResourceWaarde_ID = tekstenViewModel.WAARDE_ID
                            };

                            entities.Add(resourceItem);
                        }

                        proxy.Client.CheckIfNameExists(entities, toepassingsCode);
                        proxy.Client.AddOrUpdateResourceItem(entities.AsEnumerable());
                    }
                }                

                catch (Exception ex)
                {
                    ModelState.AddModelError(string.Empty, ex.Message);
                }
            }
            else
            {
                var errMsg = ModelState.Values
                    .Where(x => x.Errors.Count >= 1)
                    .Aggregate("Model State Errors: ", (current, err) => current + err.Errors.Select(x => x.ErrorMessage));

                ModelState.AddModelError(string.Empty, errMsg);
            }

            resourceItems = GetResourceItemsList(new TekstenViewModel.ZoekCriteria { Taal = resourceItems.FirstOrDefault().Taal, ResourceSet_ID = resourceItems.FirstOrDefault().RESOURCE_SET_ID });

            return Json(resourceItems.ToDataSourceResult(request, ModelState));
        }

1 个答案:

答案 0 :(得分:1)

问题应该是你没有从create action

返回带有product.ID的Json
Create(create => create.Action(MVC.BeheerTeksten.ActionNames.ResourceItems_Create, MVC.BeheerTeksten.Name).Data("onCreateAdditionalData"))

需要退货,带有model.Id(product =&gt; product.ID)的添加项目;

Kendo网格在ID创建时跟踪项目,因此您需要将其提供回DataSource