【问题标题】:kendo ui widget doesn't work in partial view after post-back回发后,kendo ui 小部件在部分视图中不起作用
【发布时间】:2015-05-27 10:33:52
【问题描述】:

我通过 jquery ajax 将部分视图加载到 kendo-ui 窗口小部件中,没问题,

public ActionResult Create()
{
     return PartialView("_Create");
}

public ActionResult Create(CreateObjectViewModel viewModel)
{
     if(ModelState.IsValid)
     {
        //Persist  to database ...
       return Json(new {success=true});
     }
     return PartialView("_Create",viewModel);
}

所有 kendo ui 小部件都可以正常工作,提交表单后,客户端验证也可以正常工作。

但如果出现服务器端验证错误,我会将模型状态返回到局部视图,并且视图会显示错误。

在这种情况下,我所有的小部件都失去了它们的功能并且不起作用,

这是我在部分视图中提交表单的方式:

    @using(Html.BeginForm())
    {
     @* all kendo ui widget and form element *@
     <input type="submit" id="insert" onclick(submitForm(this.id)" value="insert" />
    }
<script type="text/javascript>
    $(documet).ready(function(){
       rebindvalidation();
    }

    function rebindValidation(){
       var form =$('form');
       form.removeData('validator');
       form.removeData('unobtrusiveValidation');
       $.validator.unobtrusive.parse(form);
    }

    function submitForm(e){
       $('form').submit(function(){
       $.ajax({
         url:this.action,
         type:this.method,
         data:$(this).serialize(),
         success:function(result){
           if(result.success){
              $("#window").data('kendoWindow').close()
           }else{
             $('form').html(result);
             rebindValidation();
            }
        }
    });

</script>

当我说它失去了它们的功能时,想象一下多选小部件的行为就像一个普通的文本框,而它在第一次加载时工作直到没有提交给控制器:

@(Html.Kendo().MultiselectFor(p=>p.PartyIds)
.Name("PartyIds").DataTextField("Title").DataValueField("Id")
.Filter(FilterType.Contains)
.DataSource(s=>s.read(r=>r.Action("SearchAllPerson","Party"))
.Data("getPartyIdsData")
s.ServerFiltering(true))

我想知道如何解决这个问题。

【问题讨论】:

    标签: javascript jquery ajax asp.net-mvc kendo-ui


    【解决方案1】:

    我发现我的错误,在回发后的部分视图中,我将结果设置为表单元素,而设置为窗口是正确的。

    用另一个词代替

    else{
         $('form').html(result);
         rebindValidation();
    }
    

    这样写是正确的:

    else{
         $('#window').html(result);
         rebindValidation();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-02
      • 2017-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 2015-06-13
      • 2011-12-17
      相关资源
      最近更新 更多