It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center




已关闭8年。




背景:我被要求在一个没有文档的原始asp.net应用程序上工作,并且原始程序员也无法咨询。我主要是Perl程序员,主要是在* nix系统上,因此,尽管我对系统的实际逻辑没有大的疑问,但下面的一些“裸露的骨头”使我陷入了困境。

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

问题:在Stack Overflow上找到了许多有关从asp.net表单中提取表单变量的有用信息之后,我尝试使用Request.form [“variable_name”]检索新变量。但是很快就知道值(value)观没有实现。

这是表单新位的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表单一样),任何
    有关为什么可能发生这种情况以及是否有任何情况的指针
    否则我应该做些处理/提取数据?
  • 当我尝试读取第二个变量时,为什么所有这些都消失了,
    尽管我只读(尽管有很多有值(value)的工作),
    合二为一?
  • 在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已为您处理了大多数您想做的事情。

    关于c# - 在ASP.NET C#中读取表单变量时出现问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13349210/

    10-11 04:54
    查看更多