我有一个表格
<form id="form" action="" method="post" runat="server">
当通过 C# 代码隐藏访问时
HtmlForm form = (HtmlForm)this.FindControl("form");
并尝试改变动作
form.Attributes.Add("action","./newpage.aspx?data=data");
or
form.Attributes["action"] = "./newpage.aspx?data=data");
没有做任何改变。该表单仍然路由到同一页面。如何在代码隐藏中动态更改表单的操作?
额外细节:
我有一个包含 get 变量的页面。该获取变量需要在表单的操作部分中发送。因此,page1 响应具有 getvar1。 page1 上的表单需要发送其发布数据和 getvar1。我打算通过表单操作中的代码隐藏来调整这一点,但想避免使用 InnerHtml 来编写整个表单。 Holly 建议使用 javascript,但我还没有找到使用 javascript 获取 GET 变量的好方法。 .....只是为大众提供更多信息。
答案说明:我选择走@HollyStyles 提到的路线。我使用 javascript 在 ajax 调用完成后更改表单操作。然而,标记为正确的答案是通过代码隐藏来执行此操作的正确方法。
您可以使用控制适配器ASP.NET 的。
这是一个工作示例:
public class RewriteFormHtmlTextWriter : HtmlTextWriter
{
public RewriteFormHtmlTextWriter(HtmlTextWriter writer)
: base(writer)
{
this.InnerWriter = writer.InnerWriter;
}
public RewriteFormHtmlTextWriter(System.IO.TextWriter writer)
: base(writer)
{
base.InnerWriter = writer;
}
public override void WriteAttribute(string name, string value, bool fEncode)
{
if (name == "action")
{
value = "Change here your value"
}
base.WriteAttribute(name, value, fEncode);
}
}
使用上面的代码,并声明App_Browsers
有一个名为Form.browser
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.HtmlControls.HtmlForm" adapterType="FormRewriterControlAdapter" />
</controlAdapters>
</browser>
</browsers>
你可以改变形式。当然,这段代码会在每个表单渲染中调用。
相对的 :http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)