我有一个页面,它通过不同的.aspx页面整合不同的部分。这些页面将使用jQuery.load()动态加载到相应的div中。它们都被正确呈现,但是,当点击任何部分页面中的任何asp:按钮时,整个主页面将被部分页面替换,即使asp:按钮只是弹出一个消息框。 我发现无法解决问题,请提出建议!
非常感谢。 William Choi
答案 0 :(得分:0)
最可能的原因是您的按钮会回发到相应的页面。您应该通过从单击按钮启动的js函数/代码返回false来禁用回发。
你还没有提到你想在这里实现什么行为 - 如果整合只是为了创建一个布局,那么你应该排除不相关的标签,如head,body&在放入div之前从页面输出中形成表单。这里更好的技术是拥有用户控件(而不是页面),然后使用一些处理程序来加载临时页面上的所请求的用户控件。使用HttpServerUtility.Execute方法捕获输出 - 检查描述此技术的this article。另一方面,您希望在帖子后面保留子页面行为,然后iframes将成为可行的方法。
答案 1 :(得分:0)
当您提交页面时,您的请求将转到嵌套页面,并且它的响应仅适用于该页面。浏览器从嵌套页面接收响应,只显示它返回的内容。
这是我正在做的类似的事情。
我有一个主页面,在该页面中我通过Ajax加载部分。这些部分是ASP.NET用户控件(而不是页面)这里是为什么:页面有自己的形式,嵌套时不能很好地运行。 ajax请求传递一些参数加载控件然后使用虚拟空白页面呈现控件(我将在下面进一步解释)。生成的HTML将发送回页面并加载到div中。
以下是我加载控件的方法(在本例中“FormlessPage”是虚拟页面):
public class FormlessPage : Page { public override void VerifyRenderingInServerForm(Control control) { } }
//Ajax call
FormlessPage page = new FormlessPage();
UserControl ctrl = null;
ctrl = (UserControl)page.LoadControl("~/UserControls/someUC.ascx");
// Initialize parameters
// Add the control to the page
page.Controls.Add(ctrl);
// Render the page and capture the resulting HTML.
StringWriter writer = new StringWriter();
HttpContext.Current.Server.Execute(page, writer, false);
// Return that HTML, as a string.
json = writer.ToString();