在C#ASP.NET 3.5中更改HtmlForm操作

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来更改表单操作.但是,标记正确的答案是通过代码隐藏实现此目的的正确方法.

Ari*_*tos 5

您可以使用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