我有一個自定義「editFunc」jqGrid的代碼,打開我自己的jQuery-UI面板來編輯數據。jqGrid從自定義editFunc重新加載不工作
它保存的數據沒有問題,但我無法使用「$(」#blog-posts「)自動使用新數據更新jqGrid。trigger(」reloadGrid「);」它不適用於「editFunc」。代碼如下。不知道如何解決它。 我在這裏做錯了什麼?
我想過的另一種方法是不要做一個完整的jqGrid重裝,但只更新編輯的數據。如何從editFunc手動更新成功編輯的jqGrid行,併成功更改了記錄數據,而無需重新加載所有記錄?
這裏是我的jqGrid配置:
<table id="blog-posts">
</table>
<div id="blog-posts-nav">
</div>
<div id="edit-blog-post">
</div>
<script type="text/javascript">
function wireUpForm(dialog, updateTargetId, updateUrl) {
$('form', dialog).submit(function() {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (result) {
// Check whether the post was successful
if (result.success) {
// Close the dialog
$(dialog).dialog('close');
// reload doesn't work if called from here
$("#blog-posts").trigger("reloadGrid");
} else {
// Reload the dialog to show model errors
$(dialog).html(result);
// Setup the ajax submit logic
wireUpForm(dialog, updateTargetId, updateUrl);
}
}
});
return false;
});
}
$('#blog-posts').jqGrid({
url: 'http://localhost:24533/Admin/BlogPosts',
datatype: "json",
colModel: [
{ name: 'id', index: 'id', label: 'Post ID', width: 55 },
{ name: 'enabled', index: 'enabled', label: 'Enabled', width: 60, editable: true, edittype: "checkbox", editoptions: { value: "Yes:No"} },
{ name: 'slug', index: 'slug', label: 'Slug', width: 300, editable: true, editoptions: { style: "width:300px;"} },
{ name: 'header', index: 'header', label: 'Header', width: 300, editable: true },
{ name: 'HtmlTitle', index: 'HtmlTitle', label: 'HTML Title', width: 300, editable: true },
{name: 'created', index: 'created', label: 'Created', width: 100, editable: true },
{ name: 'lastUpdate', index: 'lastUpdate', label: 'Last Update', width: 100 }
],
rowNum: 10,
rowList: [10, 20, 30],
pager: '#blog-posts-nav',
sortname: 'id',
viewrecords: true,
sortorder: "desc",
caption: "Blog Posts",
height: 210,
});
$('#blog-posts').jqGrid('navGrid', '#blog-posts-nav',
{
editfunc: function (rowid) {
var element = $(this);
// Retrieve values from the HTML5 data attributes of the link
var dialogId = '#edit-blog-post';
var dialogTitle = 'Dialog Title';
var updateTargetId = '#container-to-update';
var updateUrl = 'http://localhost:24533/Admin/BlogPostEdit/';
// Load the form into the dialog div
$(dialogId).load('http://localhost:24533/Admin/BlogPostEdit?id=' + rowid, function() {
$(this).dialog({
modal: false,
resizable: true,
minWidth: 650,
minHeight: 300,
height: $(window).height() * 0.95,
title: dialogTitle,
buttons: {
"Save": function() {
// Manually submit the form
var form = $('form', this);
//alert('1');
$(form).submit();
$("#blog-posts").trigger("reloadGrid");
//alert('2');
},
"Cancel": function() {
//alert($("#blog-posts"));
//$("#blog-posts").trigger("reloadGrid");
//alert($("#blog-posts").getCell(2,2));
//alert($("#blog-posts").getGridParam('caption'));
$("#blog-posts").trigger("reloadGrid");
//alert(element.serialize());
//element.trigger("reloadGrid");
//alert(element.attr('id'));
//$(this).dialog('close');
}
}
});
wireUpForm(this, updateTargetId, updateUrl);
});
return false;
},
{ height: 280, reloadAfterSubmit: true }, // edit options
{width: 600, reloadAfterSubmit: true, top: 100, left: 300, addCaption: 'Add Blog Post' }, // add options
{reloadAfterSubmit: true }, // del options
{} // search options
);
$('.wysiwyg').livequery(function() {
$(this).wysiwyg();
});
</script>
UPDATE:有問題的代碼行是
$(dialogId).load('http://localhost:24533/Admin/BlogPostEdit?id=' + rowid, function() {
後你做jQuery.load()
的jqGrid的的程序重新加載結合呼叫trigger("reloadGrid")
不工作了。在您執行jQuery.load()
之後重新加載數據的唯一方法是工具欄中的重新加載按鈕。我仍然不知道如何解決它。
UPDATE2(解決方案):問題是在HTML從jQuery.ajax()返回的是與HTML頭和身體標籤完整的HTML頁面。服務器端開始返回後,只有jqGrid重載的形式開始工作。
$ .post在這裏沒有幫助。我試圖把「$(」#blog-posts「)。trigger(」reloadGrid「);」而不是「$(this).dialog('close');」到jQuery-UI面板的取消功能。在這種情況下沒有刷新,並且jqGrid重新加載也不起作用。 – Zelid
@ user118657:我想你會在**提交在服務器上處理之前嘗試刷新網格數據**。我在回答中寫下了你能解決問題的方法。你不包含'wireUpForm'的代碼,所以它絕對不清楚哪個關係具有表格數據到網格,並且你不清楚爲什麼使用'$ .dialog'而不是標準的jqGrid編輯表單。還有一點要注意:你應該從所有的URL中刪除前綴「http:// localhost:24533」並使用相對路徑。 – Oleg
我不使用標準的jqGrid編輯表單,因爲我在服務器端使用ASP.NET MVC3驗證和模型綁定,因爲它需要在使用MVC3 HTML幫助器完成的表單中使用特殊的HTML標記。我現在要添加完整的源代碼。 – Zelid