gpt4 book ai didi

javascript - 当从用户控件调用 Web 服务时,asp.net 页面为空

转载 作者:行者123 更新时间:2023-11-28 07:41:53 25 4
gpt4 key购买 nike

我有一个名为“DynamicGrid”的用户控件,它在各个页面上使用,用于在分配数据集时制作动态网格。网格具有用于编辑/插入数据的文本框。现在我收到一个要求,每当用户在网格的最后一个文本框中按下回车键时,它应该在其网格中输入一个新行,此功能以前是通过按钮的单击事件实现的。所以我将一些 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);
}

在我的网络服务上,我使用委托(delegate)来调用之前在按钮单击事件上使用的 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 始终为空,Parent、NamingContainer 和 HttpContext.Current.Handler 属性也是如此。我需要找到通过 ID 动态添加的网格,以便我可以添加新行。我被困了两天,我知道这里犯了一个非常基本的错误,请指导我

最佳答案

经过一番研究后,我决定不使用网络服务作为 HttpContext.Current.CurrentHandler是一个 Web 服务处理程序,因为此方法是由 Web 服务调用的。我搜索将其配置为使用当前页面,但无法这样做。然后我用了手册Postback执行相同的功能检查我的网格中的lastRow的最后一个文本框并将它们放入session中。现在在Page_LoadComplete在我的页面中,我已将它们放在页面上 ScriptManager.RegisterStartupScript并使用__doPostBack将所需的数据发布到我的方法中。

if (e.keyCode === 13) {{
$('#{0}').css('border', '1px dashed green');
__doPostBack('{1}', '{2}');
}}

添加了一个按钮,以便我可以从上面的代码生成合法的部分回发

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnHiddenNewRowAdd" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<asp:Button ID="btnHiddenNewRowAdd" runat="server" style="display:none;" />

然后在名为“DynamicGrid”的用户控件的页面加载上,我检查了由 MS ajax __EVENTTARGET 创建的隐藏字段。 , __EVENTARGUMENT并调用了addoRow方法

string eventTarget = Request.Form["__EVENTTARGET"];
if (eventTarget != null && eventTarget.Length > 0 )
{
string parameter = Request.Form["__EVENTARGUMENT"];
if (parameter != null && parameter.Length > 0)
addRow(parameter);
}

现在我认为当请求从Web服务生成时搜索页面是愚蠢的,它与页面生命周期无关,所以这就是为什么没有Page , ParentNamingContainer 。我打算使用网络服务,因为我没有使用 __doPostBack之前。

关于javascript - 当从用户控件调用 Web 服务时,asp.net 页面为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27917168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com