Я на самом деле решил проблему, и я обнаружил в процессе несколько вещей, которыми я поделюсь с другими, которые могут посмотреть эту ветку.
Во-первых, мне пришлось построить данные POST в точности так, как они отображаются в POST в браузере (я использовал Firebug для просмотра данных POST). Это также означало получение скрытых аргументов (особенно VIEWSTATE и EVENTVALIDATION). Я смог получить их, просто загрузив исходный код страницы по умолчанию (кстати, я делаю это в коде, потому что он не статичен для этого сайта) и проанализировав значения для скрытых полей. Затем я строю строку данных POST с любыми возможными изменениями (в моем случае изменение даты было важным, но в будущем я могу изменить другие вещи).
Теперь то, что действительно меня озадачило. Я подтвердил, что строка данных POST была точно такой же, как и строка, отправленная FireFox / FireBug через символьное сравнение, и все равно не будет работать. Затем я вспомнил в предыдущем случае, что мне нужно было установить пользовательский агент.
Итак, вот код, с которым я закончил:
string postData = String.Format("__EVENTTARGET=&__EVENTARGUMENT=&__LASTFOCUS="
+ "&__VIEWSTATE={0}"
+ "&ctl00%24UltraWebTree1={1}"
+ "&ctl00%24ContentPlaceHolder1%24ddlNoticeCategory={2}"
+ "&ctl00%24ContentPlaceHolder1%24ddlpipeline={3}"
+ "&ctl00%24ContentPlaceHolder1%24Button1={4}"
+ "&ctl00%24ContentPlaceHolder1%24tbDate={5}"
+ "&ctl00%24ContentPlaceHolder1%24ddlNoticeType={6}"
+ "&ctl00%24ContentPlaceHolder1%24tbSubject={7}"
+ "&ctl00%24ContentPlaceHolder1%24ddlNoticeSubType={8}"
+ "&ctl00%24ContentPlaceHolder1%24ddlOrderBy={9}"
+ "&ctl00%24ContentPlaceHolder1%24hfmode={10}"
+ "&ctl00%24ContentPlaceHolder1%24hfODSCommand={11}&ctl00%24hfPipeline={12}"
+ "&__PREVIOUSPAGE={13}&__EVENTVALIDATION={14}",
viewstate, webtree, noticecategory, pplcode,
button1, todaydate, noticetype, subject,
noticesubtype, orderby, hfmode, hfODSCommand,
hfPipeline, previouspage, eventvalidation);
var encoding = new ASCIIEncoding();
byte[] data = encoding.GetBytes(postData);
var myRequest = (HttpWebRequest)WebRequest.Create(RemoteURI);
myRequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)" ;
myRequest.Method = "POST" ;
myRequest.ContentType = "application/x-www-form-urlencoded";
myRequest.ContentLength = data.Length;
var newStream = myRequest.GetRequestStream();
newStream.Write(data, 0, data.Length);
newStream.Close();
var myresponse = myRequest.GetResponse();
var responseStream = myresponse.GetResponseStream();
var responseReader = new StreamReader(responseStream);
string webpagesource = responseReader.ReadToEnd();
Надеюсь, это поможет кому-то еще.