【发布时间】:2015-03-11 02:46:05
【问题描述】:
我有一个名为“DynamicGrid”的用户控件,它用于在分配数据集时在各个页面上制作动态网格。网格具有用于编辑/插入数据的文本框。现在我有一个要求,每当用户在 Grid 的最后一个文本框输入时,它应该在其网格中输入一个新行,此功能以前是通过按钮的单击事件实现的。所以我像这样在最后一个文本框上连接了一些 javascript
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);
}
在我的网络服务中,我使用委托来调用之前在按钮单击事件中使用的 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);
}
问题是 Page 始终为 null,Parent、NamingContainer 和 HttpContext.Current.Handler 属性也是如此。我需要通过 ID 找到动态添加的 Grid,以便我可以添加新行.我被困了2天,我知道这里犯了一个非常基本的错误,请指导我
【问题讨论】:
-
感谢您的快速响应,由于页面已完全加载(用户控件也是如此),因此与我的问题并不完全相关
-
我想我需要以某种方式配置我的网络服务才能访问该页面,但是如何:(
标签: javascript c# asp.net web-services user-controls