我有一個稱爲「DynamicGrid」的UserControl,它在各個頁面上用於在分配數據集時製作動態網格。網格有文本框來編輯/插入數據。現在我得到了一個要求,即每當用戶點擊進入網格的最後一個文本框時,它應該在其網格中輸入一個新行,此功能以前是通過按鈕的單擊事件實現的。所以,我迷上了一些JavaScript的最後文本框這樣當用戶控件調用Web服務時,asp.net頁面爲null
if (gv != null && gv.Rows.Count > 0)
{
GridViewRow lastRow = gv.Rows[gv.Rows.Count - 1];
var controls = lastRow.Controls[lastRow.Controls.Count - 1].Controls[0];
TextBox txtbx = ((TextBox)lastRow.Controls[lastRow.Controls.Count - 1].Controls[0].Controls[0]);
string script = string.Format(@"
$(document).ready(function() {{
$('#{0}').bind('keyup', function (e) {{
{{
if (e.keyCode === 13) {{
{{
$('#{0}').css('border', '1px dashed red');
$.ajax({{
type: 'POST',
url: '{1}',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
async: false,
data: '{{ GridViewID: ""{2}"" }}',
success: function (data) {{
alert(data.d);
}},
error: function (xhr) {{
alert('An error occurred: ' + xhr.status + ' ' + xhr.statusText + ' ' + xhr.responseText);
}}
}});
}}
}}
}}
}});
}});", txtbx.ClientID, "../../../WebService/DynamicGridAddRow.asmx/AddNewRow", gv.ClientID);
ScriptManager.RegisterClientScriptBlock(this, Page.GetType(), "script", script, true);
}
在我的web服務我使用了代理來調用先前在按鈕的單擊事件中使用的addrow方法
[WebMethod]
public void AddNewRow(string GridViewID)
{
wucDynamicGrid dynamicGrid = new App_Controls.wucDynamicGrid();
AddNewRowToDynamicGrid newRow = new App_Controls.AddNewRowToDynamicGrid(dynamicGrid.addRow);
newRow(GridViewID);
}
這是增加新的方法
public void addRow(string GridID)
{
//GridView gv = (GridView)this.Page.FindControl(GridID);
Page p = HttpContext.Current.Handler as Page;
var controls = APP_Common.CommonFunctions.FindControl<GridView>(this.NamingContainer.Controls);
GridView gv = controls;
AddNewRowToDynamicGrid(gv);
}
的問題是頁面總是空等等都是家長,NamingContainer和HttpContext.Current.Handler性能。我需要找到動態添加網格的ID,以便我可以添加一個新行。我在這裏堅持了2天,我知道這裏有一個非常基本的錯誤,請指導我
感謝您的快速響應,它不完全與我的問題完全相關,因爲頁面已完全加載(用戶控件也是如此) –
我想我需要配置我的Web服務以某種方式訪問頁面,但是如何: –