asp.net表单runat服务器

时间:2009-11-14 13:05:26

标签: c# asp.net forms runatserver

我在每个页面上都有一个搜索表单,因此我把它放在母版页上。将runat=server添加到该表单后,我现在无法使用其他运行服务器的表单;)

人们通常如何解决这个问题?

一个想法是用一个表单runat=server包围整个页面但是我必须在主页面中包含代码,即使是那些仅在一个子页面上使用的表单(例如联系人)。

人们通常如何解决这个问题?

日Thnx

3 个答案:

答案 0 :(得分:8)

这经常被认为是ASP.NET上最有问题的设计决策之一。令人遗憾的是,你有点坚持这种每页一页的原则。

您可能希望拥有多个表单的一个原因是浏览器会将默认按钮设置为提交按钮。有人在你的搜索框中输入并点击输入不应该提交主表单(假设这是登录页面),而是提交搜索按钮的微小形式。

解决此问题的最简单和“标准”方法是使用asp:Panel并设置DefaultButton属性。这应该包含包含搜索字段和搜索按钮的部分。

不要担心在整个页面周围的母版页内对<form>进行编码。这是一种常见的设计。大多数服务器控件需要一个表单,所以为什么不简单地包含它:它应该在那里。

答案 1 :(得分:2)

我建议您在母版页上使用runat = server搜索html表单,例如

<form action="Search.aspx" method="get">
  <input type="text" name="q" /><input type="submit" />
</form>

使用method = get有可能获取搜索的URL。然后使用Search.aspx的代码隐藏中的查询执行任何操作:

public void Page_Load(object sender)
{
  string q = Context.Request.QueryString["q"];
  /*...*/
}

答案 2 :(得分:1)

第一个问题是,为什么你想要多个runat =“server”表单?

您仍然可以在页面上放置没有runat="server"的表单,或者使用PostBackUrl控件上的Button属性发布到不同的ASP.NET页面。

要在多步骤过程中收集数据,您可以查看ASP.NET向导控件,请参阅Scott Guthrie的blog post here

或者您可以自己管理它并使用ASP.NET面板,或使用已经提到的PostBackUrl从ASP.NET页面导航到另一个页面。