0

私は非常に単純なウェブサイト ( http://mysite.com ) を持っています。1 つのページを含み、そのページはランダムな日時値を生成し、それを lable に書き込みます。そのページのコードは次のとおりです。

<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 アプリから、ページで生成された時間を読み取る必要があるため、デフォルト値の場合は次のようにします。

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;

DropDownList のポストバックを行う必要がある -1 および -2 日間の生成された値 (ページ コンテンツ) を読み取るにはどうすればよいですか。それとも無理ですか?

返信ありがとうございます。

追加した。変更できないサイトのコード!

4

2 に答える 2

1

このようなことはできません... HTML 応答を文字列としてダウンロードするため、ページを操作してドロップダウンの変更をシミュレートすることは不可能です..

WebClient を使用して、ドロップダウンに別の値を指定してフォーム ページを送信してみてください。これにより、上記のコードで解析できるさまざまな応答が生成されます。

于 2013-06-26T14:08:16.443 に答える
0

代わりに 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");

その場合、ポストバックをページに送信することができます。

于 2013-07-03T13:43:33.877 に答える