从代码后端提交表单

4
我在我的c#/asp.net应用程序中实现功能时遇到了问题。
我有一个包含RadioButtonList和提交按钮的表单。 RadioButtonList是从我从数据库检索的对象列表生成的Page_Load()。 如果列表中只有1个对象,我想自动提交表单。
我可以访问我的Form对象、提交按钮等,但我似乎找不到解决方案(最终我正在寻找一种form.Submit())方法。
有人知道我该怎么做吗?
提前感谢!
编辑>>以下是代码:
.aspx:http://pastebin.com/0E6T7dqH .aspx.cs:http://pastebin.com/54payZJP 编辑2 >>> 由于似乎没有办法实现我最初想要的内容,所以我最终使用了带有response.redirect()的会话变量。

来源: http://dotnetslackers.com/Community/blogs/haissam/archive/2007/11/26/ways-to-pass-data-between-webforms.aspx

意思是:这篇文章介绍了在Web表单之间传递数据的方法。它包括使用查询字符串、Application对象、Cookie和Session状态等技术。

请发布您尝试过的内容。 - Robin Maben
我尝试找到一个提交给定表单的方法,但似乎不存在。然后我尝试模拟按钮点击,但这也似乎不存在。我还尝试使用response.write(<script>...</script>)来使用JavaScript提交表单,也许这是可能的,但这不是一个非常“漂亮”的解决方案。最终,唯一的方法似乎是直接将我的POST数据发送到表单所在的页面,但我感觉这就像用重型武器杀蚂蚁(而且向另一个页面发送POST数据也很麻烦)。 - BPruvost
3个回答

3

在客户端发生的是Post请求。由于在Page_Load中你当前正在服务器端执行,所以只需调用你想要在Post时执行的代码。

编辑:实际上要转到另一个aspx页面

public void Page_Load(object sender, EventArgs e) {
    if(!IsPostback && OnlyOneItem) {
        Server.Transfer("TheOtherPage.aspx");
    }
}

Server.Transfer将保持整个请求,所以您的提交数据将保留可用。

http://msdn.microsoft.com/en-us/library/system.web.httpserverutility.transfer.aspx


该表单导向另一个页面,我从该页面检索帖子数据。 所以对于我来说,唯一的解决方案是从代码后台手动将帖子数据发送到另一个页面吗? - BPruvost
你可以使用Server.Transfer或者在最坏的情况下使用Response.Redirect。 - Ivo
我知道我已经得到了我的数据,但为了将其发送到下一页,我需要创建自己的POST请求等等...,而且似乎非常复杂,因为我只需要提交一个表单/点击一个按钮来完成完全相同的事情...再说一遍,很可能是因为我刚接触ASP.net,所以我不太理解一些具体的东西(我通常使用Java)。无论如何,我仍然不太清楚该怎么做,所以我已经在问题中添加了代码。再次感谢! - BPruvost
使用Server.Transfer传输整个请求,因此您将拥有您的POST数据。无论如何,这不是ASP.NET WebForms应该使用的方式。 - Ivo
我将在回答中发布这个想法。 - Ivo
显示剩余3条评论

2

尝试使用以下方法:

在你的Page_Load函数中:

if(!IsPostBack)
{
      if(check for only one object)
      {
         //your submit code
      }
}

1

我曾经也需要做类似的事情。以下是一种方法,您可以这样做。

Asp.Net按钮有一个名为PostBackUrl的属性,它正好做您所期望的-如果单击按钮,它控制表单将发布到哪里。

您还可以使用RegisterStartupScript函数在页面上呈现javascript。

现在,有了这两个部分,您就可以实现您的目标。

if(!IsPostBack)
{
    if(results == 1)
    {
        button.PostBackUrl = "next page's url"
        //Register script to click the button using RegisterStartupScript
    }
}

现在,我向您展示了这个,但我会警告您,可能不是最好的用户体验。当我这样做时,它是为一个非常特殊的情况而设计的,没有其他解决方案。页面实际上会返回给用户,并且他们会看到页面一会儿,然后才会点击按钮生效的javascript代码。此外,当您设置按钮的PostBackUrl时,这意味着当单击它时,将把整个表单发布到指定的页面。当前页面的后台代码将不会触发,因此如果有任何验证,它将不会运行。

即使用户只有一个选择,让用户点击按钮提交表单也没有问题。根据我的经验,用户喜欢感觉自己在系统中掌控权;他们不喜欢页面在没有他们输入的情况下自动执行操作。

此外,将下一页需要的信息放入会话甚至数据库表中,并使用Response.Redirect并没有什么问题。这是一个相当常见的做法,在大多数情况下都能可靠地工作。


谢谢你的回答。我已经在按钮上使用了PostBackUrl(请查看我的.aspx文件,我直接将其放在那里)。我得出了与你相同的结论:执行一些JS代码是可能的,但可能不是最佳实践。 因此,最终我像你建议的那样使用了Session变量,然后使用Response.Redirect,之后立即销毁该变量。 - BPruvost

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接