Kendo ui 剑道UI网格,窗体在弹出窗口中
我想为ajax调用实现单独的表单。我想有一个命令,它打开一个新的弹出窗口和一个字段,用户填写这个字段,然后单击“发送”,然后我做一个ajax调用控制器。我的代码:Kendo ui 剑道UI网格,窗体在弹出窗口中,kendo-ui,kendo-grid,Kendo Ui,Kendo Grid,我想为ajax调用实现单独的表单。我想有一个命令,它打开一个新的弹出窗口和一个字段,用户填写这个字段,然后单击“发送”,然后我做一个ajax调用控制器。我的代码: $(document).ready(function () { var grid = $("#memberList-grid").kendoGrid({ dataSource: {
$(document).ready(function () {
var grid = $("#memberList-grid").kendoGrid({
dataSource: {
type: "json",
transport: {
read: {
url: "@Html.Raw(Url.Action("MemberSearchList", "RandomPoolSelection"))",
type: "POST",
dataType: "json",
data: function () {
var data = {
SearchMember: $('#@Html.IdFor(model => model.SearchMember)').val(),
SelectionId: $('#SelectionId').val()
};
addAntiForgeryToken(data);
return data;
}
}
},
schema: {
data: "Data",
total: "Total",
errors: "Errors"
},
error: function (e) {
display_kendoui_grid_error(e);
// Cancel the changes
this.cancelChanges();
},
pageSize: @(Model.PageSize),
serverPaging: true,
serverFiltering: true,
serverSorting: true
},
pageable: {
refresh: true,
pageSizes: [@(Model.AvailablePageSizes)],
@await Html.PartialAsync("_GridPagerMessages")
},
scrollable: false,
columns: [
{
field: "PrimaryID",
title: "@T("PoolMemberList.Fields.PrimaryID")",
width: 150
},
{
field: "FirstName",
title: "@T("PoolMemberList.Fields.FirstName")",
width: 150
},
{
command:
{
text: "Exclude",
click: showExclude
},
title: " ",
width: 100
}
]
});
wndExclude = $("#exclude")
.kendoWindow({
title: "Excuse Reason",
modal: true,
visible: false,
resizable: false,
width: 300
}).data("kendoWindow");
excludeTemplate = kendo.template($("#excludeTemplate").html());
});
function showExclude(e) {
e.preventDefault();
var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
wndExclude.content(excludeTemplate(dataItem));
wndExclude.center().open();
}
和模板:
<script type="text/x-kendo-template" id="excludeTemplate">
<div id="exclude-container">
<input type="text" class="k-input k-textbox" id="note">
<br />
</div>
</script>
如何实现将此数据(带ID)发送到控制器?一种简单的方法是使用
局部视图。
这是您的命令网格
{
command:
{
text: "Exclude",
click: showExclude
},
title: " ",
width: 100
}
这里是您的功能:
函数showExclude(e){
$(document.body).append(“”);
var dataItem=this.dataItem($(e.currentTarget).closest(“tr”);
$(“#不包括窗口”).kendoWindow({
宽度:“80%”,
标题:“excludeForm”,
莫代尔:是的,
可调整大小:false,
内容:“/YourController/GetPartial?id=“+dataItem.id,
行动:[
“结束”
],
刷新:函数(){
$(“#排除窗口”).data('kendoWindow').center();
},
关闭:函数(){
setTimeout(函数(){
$(“#排除窗口”).kendoWindow('destroy');
}, 200);
}
}).数据(“kendoWindow”);
}
单击按钮后,加载窗口(弹出窗口)并调用加载局部视图的操作
,以填充窗口的内容
。
您可以将任何需要的内容传递到您的局部视图
(例如,这里我只发送Id
)
公共操作结果GetPartial(Guid id)
{
var viewModel=新ViewModelExclude
{
Id=Id,
};
返回PartialView(“_exclude”,viewModel);
}
而局部视图
是这样的:
@model视图模型排除
@使用(Html.BeginForm(“,“您的操作”,FormMethod.Post,new{id=“SendForm”}))
{
发送
}
然后单击send
按钮后调用ajax:
$(“#发送表单”).submit(函数(e){
e、 预防默认值();
变量形式=$(此);
var formData=新formData(本);
$.ajax({
类型:“POST”,
url:'@url.Action(“发送”、“您的控制器”),
数据:formData,
contentType:false,
processData:false,
成功:功能(数据){
},
错误:函数(数据){
}
});
});
您的发送操作如下:
[HttpPost]
公共操作结果发送(ViewModelExclude视图)
{
....
返回Json();
}
showExclude
函数的variablee
根本没有dataItem
属性您可以在showExclude
函数中获得dataItem
,如下所示:var dataItem=this.dataItem($(e.currentTarget).closest(“tr”)代码>非常感谢!但如果弹出窗口关闭,则无法再次打开:(我认为不是。我们必须关闭窗口,这与网格无关。我更新了答案。请检查它。尝试添加$(document.body)。追加(“”)创建窗口时,在函数中使用并使用destroy
方法。我认为它无法再次打开,因为它只是第一次加载,当你销毁时,没有对象可再次打开,因此每次需要打开时都附加div即可解决问题。请尝试并告诉我结果。是的,我只是将其用于更多c拉里蒂,我会更新的,谢谢。