在asp.net中挂钩POST参数

时间:2012-07-03 05:10:59

标签: asp.net post

我最近在挖掘一个网站来构建一些数据库。我已经构建了一个解析检索信息的python脚本,但问题是它需要一个查询字来检索包含我想要查看的信息的网页。这个页面是POST方法,所以我看不到这个页面如何检索页面列表。

描述一个清晰理解的大纲:

1. on inputKeyword.aspx : This contains a form to input a query(let's say ID)
                        When I input an ID and press search, it retrievs a 
                        relevant list
2. Press Search
3. on inputKeyword.aspx : A relevant list is showed on the same aspx page
                        (which means POST method), so I cannot see how this query
                        works on inputKeyword.aspx page.

如果这个网页是GET方法会更容易,因为我可以简单地用查询挂钩一个url,但是在POST方法中这是不可能的。

有没有什么方法可以打开步骤#3跳过步骤#1和#2?

网页是在asp.net中构建的,但只要有办法就可以对语言进行限制。

2 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望能够接受 ID 作为查询字符串的一部分。例如

  

http://your.domain.com/inputKeyword.aspx?ID=555

因此,在页面加载事件中,您可以检查查询参数的请求对象,即Request.QueryString[param],如下例所示

protected void Page_Load(object sender, EventArgs e)
{
    string id = Request.QueryString["ID"];
    if (!string.IsEmptyOrNull(id))
    {
        //do something with the requested identifier
    }       
}

注意:您可以使用Page.IsPostBack()来确定页面是第一次被点击还是由于点击按钮而回复。

要让搜索按钮正常运行,您可以选择几个选项。例如;您可以使用javascript捕获按钮onclick事件并将页面重定向到自身,并修改url以包含id文本框中的标识符。

但也许以下是最简单的,保持代码所有服务器端:

private _identifer string;

protected void Page_Load(object sender, EventArgs e)
{
    string id = Request.QueryString["ID"];
    if (!string.IsEmptyOrNull(id))
    {
        _identifer = id;
    }
}

protected void SearchButton_Click(object sender, EventArgs e)
{
    _identifer = IdentiferTextbox.Text;
}

protected void Page_PreRender(object sender, EventArgs e)
{
    if (!string.IsEmptyOrNull(_identifer))
    {
        PopulateListForidentifer(_identifer);
    }
}

基本上,该示例显示您可以应对方案。 ASP.Net的页面生命周期意味着事件按以下顺序处理Page_Load - >控制事件(例如按钮点击) - > Page PreRender。

  • 如果第一次点击页面而网址中没有标识符,则不会调用PopulateListForidentifer方法,因为从未设置_identifer。
  • 但是如果url包含一个标识符,则在页面加载事件中设置_identifer,当调用页面预渲染时,将调用PopulateListForidentifer。
  • 最后,如果页面由于搜索按钮被点击而回发给自己,则调用点击处理程序并将_identifer设置为IdentiferTextbox的内容;调用页面预渲染以及PopulateListForidentifer。请注意,这将覆盖关于即当标识符作为URL的一部分传递时的点。

答案 1 :(得分:0)

根据我的理解,您似乎想在搜索表单中模拟HTTP Post操作,无需输入ID并单击搜索,您就可以直接访问搜索结果。

以下是Scott Hanselman的Blog Post,他使用WebClient讨论了类似的主题。

您可能还想查看this thread