使用空操作属性(或根本不显示)</form>呈现<form>

时间:2013-01-09 17:14:43

标签: asp.net .net iis-7 asp.net-3.5 windows-server-2008-r2

使用以下代码:

<form id="form1" action="" runat="server">

(即使在页面加载中使用此代码隐藏:form1.Action = string.Empty;

......这是我得到的意外结果:

<form method="post" id="form1" name="form1" action="layouts/Default.aspx">

这是预期的结果,我希望你能帮到我们:

<!-- either action="" or no action attribute at all -->
<form method="post" id="form1" name="form1" action="">

AppPool设置为运行Integrated .NET v2.0.50727(我已通过打印运行时版本验证)。 .NET Framework v4.5安装在服务器上(与Visual Studio 2012一起)。

这可以保证是某种开发环境问题,原因是同一代码库为本地环境中的两位同事输出action=""。它们在很大程度上具有与我相同的系统环境规范:

  • Windows Server 2008 R2 64位
  • Visual Studio 2012
  • .NET Framework v4.5
  • 相同的AppPool设置(我们进行了双倍和三倍检查)
  • 相同的代码库(受SVN控制),包括完全相同的web.config
ASP.NET v3.5 SP1(在v4.0中更好地宣布)中的

This重大变化可能是相关的。它解释了这种行为。但是,它并没有解释为什么只有我的运行时才会发生这种重大改变。

另请注意,我已使用aspnet_regiis工具尝试了所有可用的命令组合(无效),即从不同的.NET版本文件夹中卸载/重新安装并使用-c,{{1等等。

2 个答案:

答案 0 :(得分:0)

以下丑陋的解决方法是我迄今为止找到的唯一解决方案。我正在为表单创建子类,以便删除override void RenderBeginTag上的action属性。

[ToolboxData("<{0}:HtmlFormNoAction runat=\"server\"></{0}:HtmlFormNoAction>")]
public class HtmlFormNoAction : HtmlForm
{
    protected override void RenderBeginTag(HtmlTextWriter writer)
    {
        var htmlString = new StringBuilder(); // this will hold the string
        var stringWriter = new StringWriter(htmlString);
        var htmlWriter = new HtmlTextWriter(stringWriter);
        base.RenderBeginTag(htmlWriter);
        htmlWriter.Flush();
        var formBeginTag = htmlString.ToString();
        var formBeginTagWithoutAction = RemoveActionAttribute(formBeginTag);

        writer.Write(formBeginTagWithoutAction);
    }

    private string RemoveActionAttribute(string formBeginTag)
    {
        const string actionStart = "action=\"";
        if (!formBeginTag.Contains(actionStart))
            return formBeginTag;

        var start = formBeginTag.IndexOf(actionStart);
        var end = formBeginTag.IndexOf("\"", start + actionStart.Length);
        return formBeginTag.Substring(0, start) + formBeginTag.Substring(end + 1);
    }
}

答案 1 :(得分:0)