在ASP.NET中发送回发和读取内容

本文关键字:读取 ASP NET | 更新日期: 2023-09-27 18:20:03

我有一个非常简单的网站(http://mysite.com),包含一个页面,该页面生成随机日期时间值并将其写入标签,该页面的代码为:

<form id="form1" runat="server">
    <div>
        <asp:Label ID="lblGeneratedDateTime" runat="server"></asp:Label>
        <br />
        <asp:DropDownList ID="ddlGenerateDateTime" runat="server" AutoPostBack="true" 
            onselectedindexchanged="ddlGenerateDateTime_SelectedIndexChanged">
            <asp:ListItem Selected="True" Value="0">Today</asp:ListItem>
            <asp:ListItem Value="1">-1 day</asp:ListItem>
            <asp:ListItem Value="2">-2 days</asp:ListItem>
        </asp:DropDownList>
    </div>
    </form>

和C#代码:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            lblGeneratedDateTime.Text = GenerateDateTime(0).ToString();
        }
    }
    protected void ddlGenerateDateTime_SelectedIndexChanged(object sender, EventArgs e)
    {
        int value = Convert.ToInt32(ddlGenerateDateTime.SelectedValue);
        lblGeneratedDateTime.Text = GenerateDateTime(value).ToString();
    }
    Random random = new Random();
    private DateTime GenerateDateTime(int minusDays)
    {
        DateTime date = DateTime.Now.AddDays(-minusDays);
        return new DateTime(date.Year, date.Month, date.Day,
            random.Next(0, 23), random.Next(0, 59), random.Next(0, 59));
    }
}

现在,从WinForm应用程序,我需要页面上READ生成的时间,所以对于默认值,我需要:

string url = "http://mysite.com";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream());
string page = streamReader.ReadToEnd();
int start = str.IndexOf("lblGeneratedDateTime'">") + 22;
int end = str.LastIndexOf("</span>");
string generatedDateTime = str.Substring(start, end - start);
return generatedDateTime;

如何在-1和-2天内读取生成的值(页面内容),这需要进行DropDownList的回发。或者这是不可能的?

谢谢你的回复!

已添加我无法更改网站代码!

在ASP.NET中发送回发和读取内容

你不能那样做。。。您将html响应作为字符串下载,因此不可能与页面交互并模拟下拉更改。。

您可以尝试使用WebClient并提交具有不同下拉值的表单页面。。这将生成不同的响应,您可以使用上面的代码解析这些响应。

它需要使用WebBrowser。

WebBrowser wb = new WebBrowser();
wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted);
string url = "http://mysite.com";
wb.Navigate(url);
HtmlElement item = wb.Document.GetElementById("ddlGenerateDateTime");

然后

item.SetAttribute("value", "1");
item.InvokeMember("onchange");
item.SetAttribute("value", "2");
item.InvokeMember("onchange");

在这种情况下,可以将回发发送到页面。