kendo ui 小部件在 post 返回后无法在局部视图中工作
kendo ui widget doesn't work in partial view after post-back
我通过 jquery ajax 将部分视图加载到 kendo-ui window 小部件中,没问题,
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 小部件工作正常,提交表单后,客户端验证也工作正常。
但是如果出现服务器端验证错误,我将 return 对部分视图进行建模状态并且视图显示错误。
在这种情况下,我所有的小部件都失去了它们的功能并且无法工作,
这是我在部分视图中提交表单的方式:
@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))
我想知道如何解决这个问题。
我发现了我的错误,在回发后的部分视图中,我将结果设置为表单元素,而设置为 window 是正确的。
用另一个词代替
else{
$('form').html(result);
rebindValidation();
}
这样写是正确的:
else{
$('#window').html(result);
rebindValidation();
}
我通过 jquery ajax 将部分视图加载到 kendo-ui window 小部件中,没问题,
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 小部件工作正常,提交表单后,客户端验证也工作正常。
但是如果出现服务器端验证错误,我将 return 对部分视图进行建模状态并且视图显示错误。
在这种情况下,我所有的小部件都失去了它们的功能并且无法工作,
这是我在部分视图中提交表单的方式:
@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))
我想知道如何解决这个问题。
我发现了我的错误,在回发后的部分视图中,我将结果设置为表单元素,而设置为 window 是正确的。
用另一个词代替
else{
$('form').html(result);
rebindValidation();
}
这样写是正确的:
else{
$('#window').html(result);
rebindValidation();
}