問題
這個頁面的狀態資訊無效,而且可能已經損毀
在開發使用jQuery UI 的 jquery.dataTables.js 與jquery.jeditable.js plugin做出來的Gridview效果,並可即時編輯,而編輯後將資訊送出,此做法大量減少當資料量多時postback所帶來的問題,畫面如下:
而在編輯該欄位後,按下ENTER,則會將資料送往指定的頁面處理,而採用非同步的方式,因此減少資料的傳輸數量
語法如下:
<script src='js/jquery.js' type='text/javascript'></script>
<script src='js/jquery.dataTables.js' type='text/javascript'></script>
<script type='text/javascript' language='javascript' src='js/jquery.jeditable.js'></script>
<script type='text/javascript' charset='utf-8'>
function test() {
var btn = document.getElementById("Button1");
btn.click();
}
var aDataSet = [
['Trident', 'Internet Explorer 4.0', 'Win 95+', '4', 'X'],
['Trident', 'Internet Explorer 5.0', 'Win 95+', '5', 'C'] ];
$(document).ready(function() {
$('#dynamic').html("<table cellpadding='0' cellspacing='0' border='0' class='display' id='example'></table>");
$('#example').dataTable({
'aaData': aDataSet,
'aoColumns': [
{ 'sTitle': 'Engine' },
{ 'sTitle': 'Browser' },
{ 'sTitle': 'Platform' },
{ 'sTitle': 'Version', 'sClass': 'center' },
{
'sTitle': 'Grade',
'sClass': 'center',
'fnRender': function(obj) {
var sReturn = obj.aData[obj.iDataColumn];
if (sReturn == 'A') {
sReturn = '<b>A</b>';
}
return sReturn;
}
}
]
});
var oTable = $('#example').dataTable();
/* Apply the jEditable handlers to the table */
$('td', oTable.fnGetNodes()).editable('UpdateExcel.aspx', {
'submitdata': function(value, settings) {
return {
'row_id': this.parentNode.getAttribute('id'),
'column': oTable.fnGetPosition(this)[2]
};
}
});
});
</script >
在'submitdata'裡可以加上你要傳到處理更新資料的頁面的所需資料網頁寫好後,也都正確執行,但加入了SERVER端的BUTTON後,卻發生了問題
花了2小時多找了相關資訊,終於找正解!!
解決方法
原來是出於微軟自訂義的訊息,當asp.net頁面被javascript修改後,會造成ViewState與原先的資訊無法驗證而錯誤
http://forums.asp.net/p/955145/1173230.aspx 最底下的回覆
http://brunhild194.pixnet.net/blog/post/31279292
修改如下:
.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="testPageaspx.aspx.cs" Inherits="testPageaspx" enableEventValidation="false" %>
.cs
public partial class testPageaspx : System.Web.UI.Page {
protected override object LoadPageStateFromPersistenceMedium() { return null; } protected override void SavePageStateToPersistenceMedium(object viewState) { }
protected void Page_Load(object sender, EventArgs e) { } protected void Button1_Click(object sender, EventArgs e) { } }如此一來,問題就可以解決了!
另外dataTables當修改資料後,可能會需要傳回某cell當key值去更新資料,所以自己加了一個function在裡面去取的key值
程式碼如下(加在改在dataTables.js裡)
this.fnGetRowIndex = function(nNode) {
var oSettings = _fnSettingsFromNode(this[_oExt.iApiIndex]);
if (nNode.nodeName.toUpperCase() == "TR") {
return _fnNodeToDataIndex(oSettings, nNode);
}
else if (nNode.nodeName.toUpperCase() == "TD") {
var iDataIndex = _fnNodeToDataIndex(oSettings, nNode.parentNode);
return oSettings.aoData[iDataIndex]._aData[0];//由此決定傳回哪一個column的值
}
return null;
};
沒有留言:
張貼留言