我需要在ASP.NET页面的灯箱内显示提交表单。 如果提交表单中存在错误(例如用户名不唯一),则回发会将ASP.NET页面呈现在灯箱外部。 我该如何解决这个问题?
以下是.aspx页面的代码片段,其中包含灯箱:
<...>
<p>
QunatumMotors is located in Detroit. Please use the link below to contact us.</p>
<p>
<!--START CONTACT FORM OVERLAY-->
<!-- first overlay. id attribute matches the selector -->
<a href="**../informational/contactform.aspx"** rel="#overlay" style="text-decoration:none">
> Click here to contact us
</a>
<div class="simple_overlay" id="form_contact">
<!-- overlayed element -->
<div class="apple_overlay" id="overlay">
<!-- the external content is loaded inside this tag -->
<div class="contentWrap"></div>
</div>
</div>
<!--END CONTACT FORM OVERLAY-->
<p> </p><p> </p>
<...>
contactform.aspx只是一个标准的.aspx页面,其中包含表单字段,字段验证程序,标签以显示错误(例如,用户名不唯一)和提交按钮。 当在contactform.aspx上发生回发时(当然)它会在灯箱外呈现。如何在灯箱内显示contactform.aspx的回发? 谢谢你的帮助!
答案 0 :(得分:1)
灯箱内容与其他标签或窗口不同:它成为主页的一部分。
换句话说,它将contactform.aspx
生成的HTML合并到主机页面的文档对象模型(DOM)中。激活灯箱会在发布到联系页面的主页上添加一个表单:
<html><body>
<!-- host page content here -->
<!-- contact form content -->
<form action="contactform.aspx">
<!-- text boxes, buttons, etc. -->
</form>
</body></html>
当用户提交时,他们的浏览器会发出新请求:发送到contactform.aspx
的POST。该请求会返回联系表单的HTML。
有几种方法可以解决这个问题:
使用ajax异步执行更新。 (你可能甚至可以通过在contactform.aspx
中使用UpdatePanel来实现这一点,但我不再使用它们了,并且尽管没有使用它们。)
将contactform.aspx
转换为控件(如果您在多个位置使用它)并将其嵌入主页中。
在联系表单的提交处理程序的末尾,重定向到主页,其中包含指示页面立即激活灯箱的标志。 (这有很多问题,听起来很脆弱......但这似乎是合理的。)