C# 绕过ASP.NET';s每页一个RUNAT服务器窗体

C# 绕过ASP.NET';s每页一个RUNAT服务器窗体,c#,asp.net,forms,runatserver,C#,Asp.net,Forms,Runatserver,ASP.NET限制使用超过1个runat=“server”表单 我有一个母版页,目前没有表单 我还有很多其他页面,一些带有表单(Register.aspx-Login.aspx),一些没有表单 我想在主机中添加一个注销按钮(用户登录后) 这是一种正常现象,注销按钮应始终存在 但是要使用这个ASP按钮控制器,我需要在母版页中使用一个表单 也就是说,我将无法访问包含表单的其他页面,因为我将收到一个错误 我已经有了其他的想法来绕过这个问题 1-使用JQuery使用Ajax加载处理程序,清除会话 2-将

ASP.NET限制使用超过1个
runat=“server”
表单

我有一个母版页,目前没有表单

我还有很多其他页面,一些带有表单(Register.aspx-Login.aspx),一些没有表单

我想在主机中添加一个注销按钮(用户登录后)

这是一种正常现象,注销按钮应始终存在

但是要使用这个ASP按钮控制器,我需要在母版页中使用一个表单

也就是说,我将无法访问包含表单的其他页面,因为我将收到一个错误

我已经有了其他的想法来绕过这个问题

1-使用JQuery使用Ajax加载处理程序,清除会话

2-将注销设置为一个类似按钮的链接,单击它加载另一个。aspx页面,在页面加载方法中,清除会话,然后重定向,听起来像第一个


3-将其作为一个链接,将我带到同一页面(默认值为.aspx?logout=1)请解释为什么不能在母版页中包含表单,并使用该母版页删除这些页面中的所有表单?这是ASP.NET中最常见的模式


如果您出于某种原因不能这样做,我会选择2。

请解释为什么您不能在母版页中包含表单,并使用该母版页删除这些页面中的所有表单?这是ASP.NET中最常见的模式


如果您出于某种原因不能这样做,我会选择2。

您不需要绕过它,只需将整个
asp:ContentPlaceHolder
包装在
表单runat=“server”
中,这样您就可以在每个页面上都有表单了

在母版页中

<form runat="server">
    <asp:ContentPlaceHolder id="MainBodyContent"></asp:ContentPlaceHolder>
</form>

您不需要绕过它,只需将整个
asp:ContentPlaceHolder
包装在
表单runat=“server”
中,这样您就可以在每个页面上都有该表单了

在母版页中

<form runat="server">
    <asp:ContentPlaceHolder id="MainBodyContent"></asp:ContentPlaceHolder>
</form>


>我将使用第二种方法,将重定向到一个清除会话和所有的页面,但是我认为这不够好,任何新的方法都会被赏识。您可以创建一个没有<代码> RunAT=“Server”< /C>的窗体,然后检查如“代码>”(如果请求[窗体]“LogOutButt”=“注销”)< /代码>,但是,把一个全局服务器表单放在主机中几乎总是最好的选择。我将采用第二种方法,将重定向到一个清除会话和所有的页面,但是我认为这不够好,任何新的方法都会被赏识。您可以创建一个没有<代码> RunAT=服务器的表单。
然后检查类似于
if(Request.Form[“LogoutButton”]==“Logout”)
的内容,但将全局服务器表单放入主服务器几乎总是最好的选择。