ste*_*ris 5 c# forms asp.net code-behind
我有一个表格
<form id="form" action="" method="post" runat="server">
Run Code Online (Sandbox Code Playgroud)
通过C#代码隐藏访问时
HtmlForm form = (HtmlForm)this.FindControl("form");
Run Code Online (Sandbox Code Playgroud)
并试图改变行动
form.Attributes.Add("action","./newpage.aspx?data=data");
Run Code Online (Sandbox Code Playgroud)
要么
form.Attributes["action"] = "./newpage.aspx?data=data");
Run Code Online (Sandbox Code Playgroud)
没有改变.表单仍然路由到同一页面.如何在代码隐藏中动态更改表单的操作?
额外细节:我有一个具有get变量的页面.需要在表单的操作部分中发送get变量.所以,page1响应有getvar1.page1上的表单需要发送其发布数据和getvar1.我打算通过代码隐藏在表单的操作中调整它,但是想避免使用InnerHtml来编写整个表单.霍莉建议使用javascript,但我还没有找到一个用javascript获取GET变量的好方法......为群众提供更多信息.
答案解释:我选择了@HollyStyles提到的路线.在ajax调用完成后,我使用javascript来更改表单操作.但是,标记正确的答案是通过代码隐藏实现此目的的正确方法.
您可以使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,并在App_Browsers一个名为的文件上声明Form.browser
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter controlType="System.Web.UI.HtmlControls.HtmlForm" adapterType="FormRewriterControlAdapter" />
</controlAdapters>
</browser>
</browsers>
Run Code Online (Sandbox Code Playgroud)
你可以改变形式.当然这个代码在每个表单中都会调用render.
相对:http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx