C# 模拟webform里面按钮的点击事件

本文解析了一个ASP.NET登录页面的HTML结构,包括必要的视图状态(__VIEWSTATE)及事件验证(__EVENTVALIDATION)字段,并提供了一段C#代码用于模拟登录请求。通过编码示例展示了如何构造POST数据并发送请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

生成的html内容

<body>
    <form method="post" action="./Login.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTE3NTYyOTE3Ng9kFgICAQ9kFgICBQ8PZBYCHgdvbmNsaWNrBS50aGlzLmRpc2FibGVkPXRydWU7X19kb1Bvc3RCYWNrKCdidG5Mb2dpbicsJycpZGTYVIQduJiktQAsjmET0WpCKVEwoSyPSdqBY5R5rDqlKA==" />
</div>

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
    theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>


<div class="aspNetHidden">

    <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="82312306" />
    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEdAASgOrQ71iMnYy6bc/2yqhwyR1LBKX1P1xh290RQyTesRe73C5Hghb+Z/bZTMreJjC6inihG6d/Xh3PZm3b5AoMQw8nbR9PLyUvJjDo4AdVamTiJMoO8PpF19MUnfVREfjA=" />
</div>
        <div class="top_div" style="text-align:center;"></div>
        <div style="background: rgb(255, 255, 255); margin: -100px auto auto; border: 1px solid rgb(231, 231, 231); border-image: none; width: 400px; height: 230px; text-align: center;">
            <div style="width: 165px; height: 96px; position: absolute;">
                <div class="tou"></div>
                <div class="initial_left_hand" id="left_hand"></div>
                <div class="initial_right_hand" id="right_hand"></div>
            </div>
            <P style="padding: 30px 0px 10px; position: relative;">
                <span class="u_logo"></span>         
                <input name="UserName" type="text" id="UserName" class="ipt" placeholder="请输入用户名" /> 
            </P>
            <P style="position: relative;">
                <span class="p_logo"></span>         
                <input name="UserPass" type="password" id="UserPass" class="ipt" placeholder="请输入密码" />   
            </P>
            <div style="height: 50px; line-height: 50px; margin-top: 30px; border-top-color: rgb(231, 231, 231); border-top-width: 0px; border-top-style: solid;">
                <P style="margin: 0px 35px 20px 45px;">
                    <input type="submit" name="btnLogin" value="登录" onclick="this.disabled=true;__doPostBack(&#39;btnLogin&#39;,&#39;&#39;);" id="btnLogin" style="height:28px;width:60px;" />
                </P>
            </div>
            <div style="height: 20px; line-height: 20px; margin-top: 0px; border-top-color: rgb(231, 231, 231); border-top-width: 0px; border-top-style: solid;">
                 <span id="lblMsg" style="color:Red;background-color:Transparent;"></span>
            </div>
        </div>
        <div style="text-align:center;"></div>
    </form>
</body>
</html>

 

上面二行加粗的是必带的viewstatus属性

下面是模拟请求的代码

string strViewState = System.Web.HttpUtility.UrlEncode("/wEPDwUKMTE3NTYyOTE3Ng9kFgICAQ9kFgICBQ8PZBYCHgdvbmNsaWNrBS50aGlzLmRpc2FibGVkPXRydWU7X19kb1Bvc3RCYWNrKCdidG5Mb2dpbicsJycpZGTYVIQduJiktQAsjmET0WpCKVEwoSyPSdqBY5R5rDqlKA==");
            string strEventValidation = System.Web.HttpUtility.UrlEncode("/wEdAASgOrQ71iMnYy6bc/2yqhwyR1LBKX1P1xh290RQyTesRe73C5Hghb+Z/bZTMreJjC6inihG6d/Xh3PZm3b5AoMQw8nbR9PLyUvJjDo4AdVamTiJMoO8PpF19MUnfVREfjA=");

            StringBuilder url = new StringBuilder();
            url.Append("UserPass=123456");
            url.Append("&UserName=whtydn");
            url.Append("&UserName=whtydn");
            url.Append("&__VIEWSTATE="+ strViewState);
            url.Append("&__EVENTVALIDATION=" + strEventValidation);
            url.Append("&btnLogin=登录");

            byte[] data = System.Text.Encoding.ASCII.GetBytes(url.ToString());

            Uri uri = new Uri("http://www.etaor.com/Admin/Login.aspx");
            System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(uri);
            request.Method = "post";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = data.Length;
            Stream requestStream = request.GetRequestStream();
            requestStream.Write(data, 0, data.Length);
            requestStream.Close();

            System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
            Stream responseStream = response.GetResponseStream();
            StreamReader readStream = new StreamReader(responseStream, System.Text.Encoding.UTF8);
            string retext = readStream.ReadToEnd().ToString();
            readStream.Close();

            Console.WriteLine("Result: " + retext);
C# Web Form 中在SqlServer有个数据库UL_DB,其中有一个总表:ULMaterialParameter,表中的字段为:int Id,varchar PlateType(板类型),varchar Type(Type),varchar CanadianExportCertification(加拿大出口认证),varchar Plates(板材),float PlateThicknessMin(最小板厚(mm)),varchar PP(pp),float PPThicknessMin(PP最薄厚度(mm)),varchar InkPHCertified(塞孔认证),varchar Ink(油墨),varchar Process(流程别),int PressingTimes(压合次数),varchar SurfaceTreatment(表面处理方式),int IMaximumInnerCopperThicknessMic(I-最大内层铜厚mic),varchar PHInk(塞孔油墨),int EMinimumOuterCopperThicknessMic(E-最小外层铜厚mic),varchar DSR(是否符合DSR),int ProductThicknessMin(成品最薄厚度(mm)),float LineWidthMin(最小线宽(mm)),float EdgeWireWidthMin(最小边缘导线宽(mm)),float NoLlineConductorDiameterMax(无线路导体最大直径(mm)),int SolderingTemperature (焊锡温度(℃)),int SolderTemperatureDuration(焊锡温度持续时间(S)),int OperatingTemperatureMax(最高操作温度(℃)),varchar CombustionGrade(燃烧等级),int TemperatureMax(最大温度℃),int MaximumCycle(最大周期cycle),某些字段里面的值有很多,比如某条数据中的Plates就包含NY6200, NY6200 (C), NY6200 (D), NY-P1 (C), NY-P1 (D), NY-P2 (C), NY-P2 (D),NY-P1, NY-P2, NY6300,NY6300 (C), NY6300 (D),所以还建立了每个字段单独的子表如UL_Plates,现在的需求是:需要一个C#WebForm界面,可以对这些数据进行查询,查询方式是联合查询加模糊查询,输入值时可以直接输入(需要对输入的值的合法性进行校验)也可以点击输入框旁的按钮弹出一个表格,这个表格绑定了子表们,然后在弹出的这个表格中进行相应子表值的选择,表格中的字段过多时有翻页的功能,选择完后点击完成,将这些值填入相应的输入框中,选择完后,点击查询,将查询到的数据显示到一个表中,这个表中可以进行数据修改以及数据删除,数据修改时也可以直接输入也可以点击文本框旁的按钮弹出一个表格(同查询一样),手动输入修改原有数据时需要对输入的值的合法性进行校验,修改完后点击保存;界面中还能新增数据,新增数据输入值时可以直接输入也可以点点击文本框旁的按钮弹出一个表格(同查询一样),选择完后点击保存,页面中所有增删改的操作都会以txt文本的方式记录到本地。请根据这些所有的字段将这个前后端完整的开发出来(代码中包含所有提供的字段)页面美观,特别是在模拟框选择子表数据后一定要能填入文本框中。模拟框中选择值后,值没有填入相应的文本框
最新发布
06-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值