背景:我被要求处理一个遗留的 asp.net 应用程序,该应用程序没有文档,原始程序员也无法咨询。我主要是一个 Perl 程序员,主要是在 *nix 系统上,所以虽然我对系统的实际逻辑没有什么大问题,但我被下面的一些“裸露的骨头”东西缠住了。
大纲: 我正在尝试扩展现有的 aspx 表单以增加其功能,该表单是购买电话号码系统的一部分。目前,第一次调用的表单在 HTML 下拉列表中显示位置和电话区号列表,并希望用户选择一个。When a value is selected (or selected and the select button clicked, if JS is disabled) and the form submitted, the page in postback mode then provides an appropriate redirect to a purchase page, with various values set in the query string. 我想通过在同一个表单上添加第二行控件来扩展功能,包括一个供用户输入区号的文本框和一个“搜索”按钮。这个想法是,当用户这样做时,系统将对该区号进行数据库搜索,如果找到匹配项,生成适当的重定向到销售该区域的页面。所有代码都是(并且将是)在 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"],所以这里似乎还有其他事情发生。