使用以下代码:
<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=""
。它们在很大程度上具有与我相同的系统环境规范:
web.config
This重大变化可能是相关的。它解释了这种行为。但是,它并没有解释为什么只有我的运行时才会发生这种重大改变。
另请注意,我已使用aspnet_regiis
工具尝试了所有可用的命令组合(无效),即从不同的.NET版本文件夹中卸载/重新安装并使用-c
,{{1等等。
答案 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)