[英]What is the best way keep track of your identifiers for your Jquery and CSS?
[英]How to implement properties of checkbox to keep track of your changes on each line in your table without employing Grid object or jQuery.Data(Input)?
如何在不涉及Grid或jQuery.Data(input)邏輯的情況下僅在更改的行上選擇性地執行表單請求?
除了該程序較舊之外,AJAX不適用於此處,因為我不希望用戶輸入更改時每一行都觸發更改事件! 我要提交的內容是:用戶完成所有行更改后,只需單擊1次單擊事件!
那么,最小化瀏覽器-服務器行程的最簡單的捷徑是什么?
每行我都有這個不可見的復選框
<input type="checkbox" style="display:none;" name="N_CheckChanged">
和該行上的其他隱藏對象以跟蹤更改。
<input type="hidden" value="beforeChangeVal" name="h_CertainObject">
我在服務器端進行更改的代碼是
string[] formCheckChanged = Request.Form.GetValues("N_CheckChanged");
但是,如果您要使用名稱派生(提取復選框的前綴以獲取其他對象的名稱)來哈希到對象的新值以更新數據庫,則代碼可能會很混亂。 而且,那不好。
要回答上述問題,您必須知道
復選框元素具有這兩個不同的屬性
一世。 檢查==是/否
II。 值:='任何字符串值'
一個與另一個無關。
在CHECKED屬性中,僅當該行發生更改時,才將其設置為true 。 復選框對象將從Server.Request使自己無形的 (禁用), 否則 。
在VALUE屬性中,可以忽略該行的所有待發布值(類似於jQuery.Data(input)),而不必考慮選中的屬性== true / false!
提交瀏覽器后,執行
function do_checkChanges() {// checking each row
for (var ii = 0; ii < document.getElementsByName("N_CheckChanged").length; ii++) {
document.getElementsByName("N_CheckChanged")[ii].checked = 0;
//detect changes
if ((document.getElementsByName("R_DateResume")[ii].value != document.getElementsByName("h_DateResume")[ii].value)
|| (document.getElementsByName("R_CheckInhibited")[ii].value != document.getElementsByName("h_CheckInhibited")[ii].value)
)
{
document.getElementsByName("N_CheckChanged")[ii].checked = 1;//mark the change
document.getElementsByName("N_CheckChanged")[ii].value =
document.getElementsByName("h_RowID")[ii].value + "|"
+ document.getElementsByName("R_CheckInhibited")[ii].checked + "|"
+ document.getElementsByName("R_DateResume")[ii].value
;
}
}
whoPostBack.value = 'view2';
}
將更新存儲在復選框中之后,服務器端代碼應像微風一樣! 在服務器端,您所需要做的就是
string[] formCheckChanged = Request.Form.GetValues("N_CheckChanged");
if (formCheckChanged != null)
{
foreach (string checkChanged in formCheckChanged)
{
sValues = checkChanged.Split('|');
correspondedRow = sValues[0];
data1 = sValues[1];
data2 = sValues[2];
theSqlCmd.CommandText =
" update tb_LOG set InhibitedNow='" + data1 + "', InhibitEnd = '" + data2 + "', InhibitedBy = '" + MyConnections.userID
+ "' where RowID =" + correspondedRow;
try
{
theSqlCmd.ExecuteNonQuery();
}
catch (Exception eX)
{
Response.Write(theSqlCmd.CommandText); Response.End();
}
}
//Response.End();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.