【发布时间】:2012-06-06 10:30:28
【问题描述】:
我的代码....
public string ConstructButtonEvents(string buttonid, string gridID, string GridControlId, string ActionUrl)
{
StringBuilder sbButtonEvents = new StringBuilder();
GridControlId = GridControlId.Trim();
sbButtonEvents.Append(" $('#" + buttonid + "').die().live('click', function () { ");
sbButtonEvents.Append("var SelectedArtifactDetails = new Array();");
sbButtonEvents.Append(" var CurrentArtifactDetails = new Array();");
sbButtonEvents.Append("for (var i = 0; i < $('#" + gridID + " tbody tr').length; i++) {");
sbButtonEvents.Append(" var rowId = jQuery('#" + gridID + " tr:eq(' + i + ')').attr('id');");
sbButtonEvents.Append("var row = $('#" + gridID + "').jqGrid('getRowData', rowId);");
sbButtonEvents.Append(" if (($('#Status" + GridControlId + "'+rowId).attr('checked') == 'checked') && ($('#Status" + GridControlId + "'+rowId).attr('disabled') != 'disabled')) {");
sbButtonEvents.Append("CurrentArtifactDetails = {");
sbButtonEvents.Append(" Complete: 'Y',");
sbButtonEvents.Append("StakeHolderEmail: $('#Stakeholder" + GridControlId + "'+rowId).attr('value'),");
sbButtonEvents.Append("UploadFile: $('#uploadFile" + GridControlId + "'+rowId).attr('value'),");
sbButtonEvents.Append("PhaseArtifactId: $(row).attr('ID'),");
sbButtonEvents.Append("Status: $('#list" + GridControlId + "'+rowId+' option:selected').text()");
sbButtonEvents.Append("};");
sbButtonEvents.Append("SelectedArtifactDetails.push(CurrentArtifactDetails);");
sbButtonEvents.Append("}");
sbButtonEvents.Append("}");
sbButtonEvents.Append(" $.ajax({");
sbButtonEvents.Append(" url: '" + ActionUrl + "',");
sbButtonEvents.Append(" async: false,");
sbButtonEvents.Append(" loadonce:false, type: 'POST', dataType: 'json', data: JSON.stringify(SelectedArtifactDetails), contentType: 'application/json; charset=utf-8',");
sbButtonEvents.Append(" success: function () {");
//sbButtonEvents.Append(" $('#" + gridID + "').jqGrid('GridUnload');");
sbButtonEvents.Append(" $('#" + gridID + "').trigger('reloadGrid');");
sbButtonEvents.Append(" }, error: function () { alert('error'); }");
sbButtonEvents.Append("});");
sbButtonEvents.Append("});");
return sbButtonEvents.ToString();
}
我有多个选项卡,但网格 ID 生成是完美的。我在 .cs 本身中构建网格。我需要将行中的数据更新到数据库。所以,我有一个更新按钮......点击它我发布(ajax)数据。数据更新得很好。但是网格没有重新加载。
点击更新按钮,我获取值,然后调用下面的 ajax 帖子
$.ajax({ url: '/SDLCMClassic/EditProject/BatchUpdate',
type: 'POST',
dataType: 'json',
data: JSON.stringify(SelectedArtifactDetails),
contentType: 'application/json; charset=utf-8',
success: function () {
$('#tblArtifact1').trigger('reloadGrid');
}, error: function () { alert('error'); }
});
});
我能够获取网格中的行值并且能够成功发布它。它也在数据库中得到更新。但是没有立即重新加载。如果我刷新整个页面,那么只有我能够看到更新的数据。
这里是用js构造jqgrid的代码
$(function () {
$('#tblArtifact1').jqGrid({
url: '/SDLCMClassic/EditProject/FillArtifactGrid?ppmno=188035&phaseName=Project Startup',
datatype: 'json',
mtype: 'GET',
colNames: ['Artifact', 'Complete', 'Status', 'Stakeholder', 'App Reference', 'Document', 'URL', 'ID'],
colModel: [
{ name: 'Name', index: 'Name', editable: false, edittype: '', align: 'left', key: false, hidden: false, formatter: 'showlink', formatoptions: { target: '_blank', baseLinkUrl: '' }, width: $(window).width() * .1, sortable: false },
{ name: 'Complete', index: 'Complete', editable: false, edittype: '', align: 'center', key: false, hidden: false, formatter: '', formatoptions: { target: '', baseLinkUrl: '' }, width: $(window).width() * .06, sortable: false },
{ name: 'Status', index: 'Status', editable: false, edittype: '', align: 'center', key: false, hidden: false, formatter: '', formatoptions: { target: '', baseLinkUrl: '' }, width: $(window).width() * .10, sortable: false },
{ name: 'StakeHolderEmail', index: 'StakeHolderEmail', editable: false, edittype: '', align: 'center', key: false, hidden: false, formatter: '', formatoptions: { target: '', baseLinkUrl: '' }, width: $(window).width() * .15, sortable: false },
{ name: 'App Reference', index: 'App Reference', editable: false, edittype: '', align: 'center', key: false, hidden: false, formatter: '', formatoptions: { target: '', baseLinkUrl: '' }, width: $(window).width() * .15, sortable: false },
{ name: 'Document', index: 'Document', editable: false, edittype: '', align: 'center', key: false, hidden: false, formatter: '', formatoptions: { target: '', baseLinkUrl: '' }, width: $(window).width() * .18, sortable: false },
{ name: 'URL', index: 'URL', editable: false, edittype: '', align: 'center', key: false, hidden: false, formatter: '', formatoptions: { target: '', baseLinkUrl: '' }, width: $(window).width() * .15, sortable: false },
{ name: 'ID', index: 'ID', editable: false, edittype: '', align: 'center', key: false, hidden: true, formatter: '', formatoptions: { target: '', baseLinkUrl: '' }, width: $(window).width() * .01, sortable: false }
],
viewrecords: true,
sortname: 'Complete',
sortorder: 'asc',
width: 'auto',
height: 'auto',
subGrid: true,
subGridRowExpanded: function (subgrid_id, row_id) {
$('#' + subgrid_id).html(renderhtmlforSubgrid(this, subgrid_id, row_id));
},
gridComplete: function () {
var dataIds = $('#tblArtifact1').jqGrid('getDataIDs');
for (var i = 0; i < dataIds.length; i++) {
$('#tblArtifact1').editRow(dataIds[i], false);
}
},
loadComplete: function () {
ModifyGridDefaultStyles('tblArtifact1');
}
});
});
【问题讨论】:
-
伙计,你为什么要在 CS 中创建事件所有这些 JavaScript 可能只是客户端脚本。
-
我创建它是为了可重复使用。但是,一切正常。除了 $('#" + gridID + "').trigger('reloadGrid');
-
很难阅读将在
StringBuilder内部创建的 JavaScript 代码。你能更好地发布纯 JavaScript 代码吗?您可以打开页面的源代码获取代码并将其格式化以便更好地阅读。此外,我不明白为什么您可能需要生成如此奇怪的代码。将代码保存在页面中包含的某个 JavaScript 文件中并使用return String.Format("myGlobalFunc({0},{1},{2},{3});", buttonid, gridID, GridControlId.Trim(), ActionUrl);之类的东西作为函数的一行代码不是更容易吗? -
谢谢奥列格。给我一些时间我会发布它。我无法发布代码。一些格式问题...
标签: asp.net-mvc-3 jqgrid