ASP.net在发布时不会填充服务器表单的action =“”

时间:2012-02-03 16:28:37

标签: asp.net webforms

我有一个ASP.net webforms网站,主页中有一个服务器表单,因为所有页面都需要它。

调试时action参数在运行时与id一起填充,但是当我使用IIS7部署在我的服务器上时,它不会出现......但仍然有效。它不会导致网站问题,但它使我的W3C HTML5验证失败,因为它需要填充。

调试源:

<form method="post" action="index.aspx" id="aspnetForm">

直播来源:

<form method="post" action="" id="aspnetForm">

母版页中的表单声明:

<form runat="server">
.. some divs
</form>

我知道表单标签没有定义ID /操作等,因为ASP在运行时配置默认值,这很好,虽然由于某种原因它在我的服务器上搞砸了。我尝试使用action="<% Path etc %>"来获取路径名称,但它不起作用。

我做错了什么?我是否遗漏了某些内容,或者在主页中使用表单是不是很糟糕?

感谢。

更新

好的,为了解决答案中指出的问题,我在MasterPage Page_Load上设置了Form.Action,最后得到了W3C的绿灯!

注意:我正在使用Intelligencia重写器,但您可以使用Request.Url

拉取网址
public partial class myMasterPage : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Form.Action = Intelligencia.UrlRewriter.RewriterHttpModule.RawUrl;
    }
}

2 个答案:

答案 0 :(得分:7)

asp.net 4.0?如果是,请回答:http://www.asp.net/whitepapers/aspnet4/breaking-changes#0.1__Toc256770154;这不是一个简单的阅读,我自己也不熟悉,所以你应该阅读它,看看它会如何影响你的网站。

答案 1 :(得分:4)

我刚看到你的帖子有完全相同的体验。在我看来,这是一种不直观的 by-design 行为,会给大多数试图掌握兼容HTML5的新ASP.NET开发人员带来困惑。

无论如何,经过一些篡改后,使用以下方法可以很容易地解决问题。 没有必要篡改web.config - 谢天谢地!

在母版页面中,添加此代码段(如果您没有使用母版页,则添加此问题的默认页面)

Protected Sub Page_PreRender(sender As Object, e As EventArgs) Handles Me.PreRender
    If Not Page.IsPostBack Then
        If Page.Form.Action = String.Empty Then
            Page.Form.Action = Request.Url.AbsoluteUri
        End If
    End If
End Sub