加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

在asp.net C#中读取表单变量的问题

发布时间:2020-12-16 03:28:02 所属栏目:asp.Net 来源:网络整理
导读:背景:我被要求处理遗留的asp.net应用程序,该应用程序没有文档,原始程序员无法进行咨询.我主要是一个Perl程序员,主要是在* nix系统上,所以虽然我对系统的实际逻辑没有重大问题,但我会被下面的一些“裸骨”东西束缚在一起. 大纲:我正在尝试扩展现有的aspx表
背景:我被要求处理遗留的asp.net应用程序,该应用程序没有文档,原始程序员无法进行咨询.我主要是一个Perl程序员,主要是在* nix系统上,所以虽然我对系统的实际逻辑没有重大问题,但我会被下面的一些“裸骨”东西束缚在一起.

大纲:我正在尝试扩展现有的aspx表单以增加其功能,该表单是购买电话号码系统的一部分.此时,首次调用时的表单会在HTML下拉列表中显示位置列表和电话区号,并希望用户选择一个.当选择一个值(或选择并单击选择按钮,如果禁用JS)并提交表单时,回发模式下的页面将提供适当的重定向到购买页面,并在查询字符串中设置各种值.我想通过在同一表单上添加第二行控件来扩展功能,包括用户输入区号的文本框和“搜索”按钮.这个想法是,当用户这样做时,系统将对该区域代码进行数据库搜索,如果找到匹配,则生成适当的重定向到销售该区域的页面.所有代码都是(并将在)C#中.

问题:在Stack Overflow上从asp.net表单中提取表单变量时发现了很多有用的信息,我尝试使用Request.form [“variable_name”]检索我的新变量.但很快就会发现价值观没有通过.

这是表单新位的aspx页面代码:

<tr>
    <td align='left'><b>STD code:</b></td>
    <td align='left'>
        <asp:TextBox id="STD_Code_Search"
             AutoPostBack="True"
             Columns="7"
             Text=""
             TextMode="SingleLine"
             Wrap="False"
             runat="server"/>
    </td>
        <td><asp:Button ID="Button2" runat="server" Text="Search" /></td>
</tr>

我希望能够将这些变量拉回来

Button2_Clicked = Request.Form["Button2"]
STD_Code_Search = Request.Form["STD_Code_Search"]

但是没有任何事情发生过.基于更多搜索,我发现此代码显示进入表单的所有变量:

foreach(string key in Request.Form.Keys)
    {
        LOG.WriteLine(key + ": " + Request.Form[key] + "<br/>");
    }

LOG对象是一个StreamWriter转到文本文件,似乎工作正常.

但是文件中的数据如下所示:

ctl00$ctl00$ctl00$ContentPlaceHolder1$Main$Range_Data$STD_Code_Search: 01952<br/>
ctl00$ctl00$ctl00$ContentPlaceHolder1$Main$Range_Data$Button2: Search<br/>

很公平,然后我尝试使用以下内容来检索C#中的数据

STD_Search = Request.Form["ctl00$ctl00$ctl00$ContentPlaceHolder1$Main$Range_Data$STD_Code_Search"];

这确实有效,如果我将STD_Search发送到StreamWriter LOG,我可以在文本文件中看到输入的值.

但是,如果我然后尝试读取第二个值(在这种情况下,我试图捕获Button2的值,所以我可以触发特定行为,如果单击该按钮而不是原始按钮),使用以下代码:

STD_Search = Request.Form["ctl00$ctl00$ctl00$ContentPlaceHolder1$Main$Range_Data$STD_Code_Search"];
Button2_Clicked = Request.Form["ctl00$ctl00$ctl00$ContentPlaceHolder1$Main$Range_Data$Button2"];

然后,虽然asp.net进程似乎都正确完成(没有错误或页面崩溃),但文本文件的写入停止并且根本没有写入任何数据.

问题:

>我确信我不应该包括所有占位符的东西
(在这里阅读我收集到的是底层框架的一部分
实际上,asp应该只向我提供命名变量
与Perl或PHP系统相同,使用纯HTML格式),任何
指出为什么会发生这种情况以及是否存在任何问题
否则我应该做的是处理/提取数据?
>当我尝试读取第二个变量时,为什么这一切都会消失,
尽管工作(对于一些大的工作价值),我只读
在一个?
> asp.net和C#上有推荐的书吗?我有
Sitepoint的“使用C#和VB构建您自己的asp.net 4网站”,其中
已经帮了一下,但对于试图接受某人并没有那么有用
别的代码分开并重新构建它.

之前的研究:我已经对此进行了广泛的搜索,但是到目前为止我看到的大多数答案都与使用asp.net处理从外部站点提交的数据等的人或者直接使用post的脚本有关.我在asp.net上看过教程的所有网站似乎都说我应该使用Request.Form [“variable_name”],所以这里似乎还有其他东西.

解决方法

您应该使用代码隐藏来完成所有这些工作.它会让它变得更容易.

string searchText = STD_Code_Search.Text;

要知道按钮是否被点击,你会这样做

<asp:Button ID="Button2" runat="server" Text="Search" OnClick="Button2_Click" />

并处理它

protected void Button2_Click(object sender,EventArgs e)
{
    //button2 was clicked
}

Asp.Net是一个事件驱动的框架,不像PHP或JSP. Pick a good book on Asp.Net and read.您尝试做的大部分事情都是由Asp.Net为您处理的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读