操纵Form.Action

时间:2011-09-23 08:29:39

标签: c# asp.net vb.net webforms

我必须使用Form.Action重定向到将从我的页面中获取值的脚本。值得注意的是,这个脚本是外部的。

我的问题是我还想要点击的按钮并将Action连接到它,以便首先在代码中完成一些功能。

无论如何,我可以:

在按钮点击事件处理程序中,我可以设置Form.Action,然后调用Form.Submit之类的内容吗?

提前设置Form.Action,然后在操作发生之前以某种方式回发按钮。

如果无法做到这一点,那么我们将非常感谢任何有关如何实现这一目标的指示。

5 个答案:

答案 0 :(得分:3)

如果用户点击按钮时页面不需要在服务器端进行验证/处理,那么你可以这样做,

在ASPX中:

<asp:Button ID="btnSubmit" runat="server"
   OnClientClick="$('form').get(0).setAttribute('action', 'ScriptActionUrl'); $('form').submit();"
   Text="Submit">
</asp:Button>

如果要在服务器端处理/验证某些内容,请执行

在ASPX中:

<asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmit_Click" Text="Submit">
</asp:Button>

在页面后面代码:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    Page.Validate(); //Do Validation or some other processing
    if(Page.IsValid)
    {
         Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "$('form').get(0).setAttribute('action', 'ScriptActionUrl'); $('form').submit();", true);
    }
}

答案 1 :(得分:1)

这是一个您关心提交表单的表格吗?如果必须要做的只是提交它,您可以在按钮点击事件中构建POST提交的数据并将其发送出去,而无需重定向用户并继续处理您的代码。

有一种有用的文档可以通过多种方式来实现here

通常,您将使用构建器构建POST数据,然后将其发送出去。这是一个例子:

// Create a new WebClient instance to send the data with
WebClient myWebClient = new WebClient();

// Collection to hold our field data
NameValueCollection postValues = new NameValueCollection();

// Add necessary parameter/value pairs to the name/value container.
postValues.Add("LoginName", tbLoginName.Text);
postValues.Add("Password", tbPassword.Text);

// Send off the message
byte[] responseArray = myWebClient.UploadValues("http://website.com", postValues);

// Decode and display the response.
tbResponse.Text = Encoding.ASCII.GetString(responseArray);

这段代码只是一个模拟,但如果这是你想要的路径,它应该指向正确的方向。

答案 2 :(得分:0)

您可以在后面的代码中执行您需要执行的操作,然后调用Server.Transfer(string url,bool preserveFormVariables);将请求移动到另一个页面来处理。

然后,您可以在其他页面使用Request.Form来获取所需的值。

答案 3 :(得分:0)

通过为任何按钮控件设置PostBackUrl属性(如asp.net按钮或链接按钮),这很有可能。有关概念证明,请执行以下操作:

  1. 创建一个asmx Web服务项目;添加一个名为SayHello的web方法。它将接受一个参数 - 用户名并将Hello <Username>返回给调用客户端。
  2. 运行此网络服务。假设其网址类似于http://localhost:6107/DemoAsmx/demo.asmx
  3. 打开另一个VS实例。创建一个普通的Web项目。添加一个aspx页面。添加一个文本框。将其ID设置为Username
  4. 在页面上添加一个按钮。将其PostbackUrl属性设置为http://localhost:6107/DemoAsmx/demo.asmx/SayHello
  5. 运行Web项目。现在在文本框中输入名称,然后单击按钮。您将看到来自asmx Web服务的xml响应。
  6. 这也可以通过javascript完成。我希望这会有所帮助。

答案 4 :(得分:0)

由于页面需要提交到不受您控制的页面,我建议您创建一个与按钮单击相关联的Web服务。使用以下代码,您可以创建在页面提交之前发生的javascript事件:

btnSubmit.Attributes.Add("onclick", "javascript:functionName()")

将functionName替换为您正在进行Web服务调用的函数的名称。这样可以添加基于Web服务结果取消表单提交的功能:

return false;