webform 最后的黄昏之力
前言
现在有人谈起webform 一般都会说这种技术已经过时了,毫无用处。
因为我们在日常开发中已经不会去开发哪种几个简单的网页的程序,我们的业务更加复杂,这种拖动式的过于死板。
但是是否毫无用处呢?其他的我不知道,但是如果做一个简单的工具类网页还是感觉非常清晰的,然后日常写一些东西的时候我们需要一个界面去展示我们测试的数据,那么我还是觉得这东西挺方便的。
以前学习webform的时候是在上学期间,做项目用了一个学期(好吧,非常古老了),后来都是mvc了。下面我阐述一些自己做工具和日常在控制台不好显示的时候使用webform的一个好处。
正文
更新页面不刷新
我觉得无论作为工具,还是测试,现在页面我希望页面更新的时候,是不希望刷新页面的。
那么webfrom是如何实现的。
有两种方式:
第一种:
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<asp:Label ID="Time1" runat="server" Text="Timel"></asp:Label>
<asp:Button runat="server" Text="按钮1" OnClick="OnClick" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="Time2" runat="server" Text="Time2"></asp:Label>
<asp:Button runat="server" Text="按钮2" OnClick="OnClick" />
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
显示界面如下:
你需要引入:ScriptManager 组件,ScriptManager 一定要在form中,一般form会包裹整个网站的html。
然后你仅仅需要在UpdatePanel中写入你需要更新的元素。
比如第一个按钮一,有一个事件onclick。那么这个事件会对应后台的:
protected void OnClick(object sender, EventArgs e)
{
this.Time1.Text = System.DateTime.Now.ToString();
this.Time2.Text = System.DateTime.Now.AddDays(1).ToString();
}
我仅仅需要设置this.Time1和this.Time2的值,那么他们就会刷新,也不会刷新整个页面。
看一下原理:
它会去做一个请求:
然后获得到我们需要刷新的部分:
我觉得不需要过多的去关注着如何刷新,因为已经非常成熟,加上其现在用了做工具。
这时候有人问了,做工具或者测试的时候也需要自定义一些复杂的回调啊。那么这时候pageMethods可以帮你实现,你不需要去引入任何库,因为webfrom自带。
第二种:
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">
</asp:ScriptManager>
<script type="text/javascript">
PageMethods.set_path("About.aspx");
function tips() {
var txt = document.getElementById("TextBox1").value;
PageMethods.callmethod(txt, funRight);
}
function funRight(val, value2) //回调函数,用val接受后台代码aa的执行结果
{
alert(val);
}
</script>
<asp:Label ID="Label1" runat="server" Text="请输入信息:"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<input type="button" value="转发我输入的内容" onclick='tips()' id="btnGetServerTime" />
</div>
</form>
</body>
效果:
其实重点看tips就好,PageMethods.callmethod(txt, funRight);
这个PageMethods是渲染引擎引入的,后面我会介绍。
那么这个会执行后台的callmethod方法,txt是传入的参数,funRight是成功回调。
看下后台:
[WebMethod]
//[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string callmethod(string str)
{
return "您输入的是:"+ str;
}
拿到数据后,加上“您输入的是:”,然后返回。
效果:
介绍一下原理:
它会去后台调用callmethod方法,
然后会返回:
那么看下PageMethods.callmethod为什么会去调用到我们后台的方法:
上图我们看到这个会帮我们生成callmethod方法,然后调用对应的接口,这让我们的代码看起来清爽。
数据绑定
后台加上有一个类:
/// <summary>
/// Users 的摘要说明
/// </summary>
public class Users
{
private string Nickame;
private string Sex;
public Users(string nickName,string sex)
{
this.Nickame = nickName;
this.Sex = sex;
}
public string Sex1 { get => Sex; set => Sex = value; }
public string Nickame1 { get => Nickame; set => Nickame = value; }
}
然后前台:
<body>
<form id="form1" runat="server">
<div>
<table>
<%--创建一个表格--%>
<thead>
<%--表格的表头--%>
<tr>
<%--每一列的列名--%>
<td>用户</td>
<td>性别</td>
< /tr> </thead> <tbody>
<%--表格的主体--%>
<asp:Repeater ID="Repeater1" runat="server">
<%--循环数据--%>
<ItemTemplate>
<tr>
<%--括号内为属性名--%>
<td><%#Eval("Nickame1") %></td>
<td><%#Eval("Sex1") %></td>
</tr>
</ItemTemplate>
</asp:Repeater>
</tbody>
</table>
</div>
</form>
</body>
那么如何绑定:
List<Users> users = new List<Users> {
new Users("张三","男"),new Users("李四","女")
};
Repeater1.DataSource = users;//指定数据源
Repeater1.DataBind();//绑定数据源
效果:
这样就可以直接绑定我们的数据了。
关于ui
ui的话,直接找个库,最好找一个纯的css库。
总结
webform的确不适合我们的一些中大型和一些复杂的页面了。
但是webform用来做测试或者日常的控制台替代品还是比较好的,可以看到其实webform做一些小的东西,还是非常清爽的,做小型工具的话,上面这些完全够用。
我们可以不用过多的js代码(伤眼睛),注重的更多的是逻辑,我们可以把我们的关注点转移到功能实现上去。
上面只是个人观点,如有不同的观点,请包容指正。
webform 最后的黄昏之力的更多相关文章
- WebForm获取GET或者POST参数到实体的转换,ADO.NET数据集自动转换实体
最近在修改维护以前的webform项目(维护别人开发的.....)整个aspx没有用到任何的控件,这个我也比较喜欢不用控件所以在提交信息的时候需要自己手动的去Request.QueryString[] ...
- Webform:Application、ViewState对象的用法
Application Application对象的作用范围是整个全局,也就是说对所有用户都有效.它在整个应用程序生命周期中都是有效的,类似于使用全局变量一样,所以可以在不同页面中对它进行存取.它和S ...
- webform开发基础
ASP.NET WebForm C/S(Client/Server):客户端服务器 B/S(Browser/Server):浏览器服务器 C/S和B/S的区别: 首先必须强调的是C/S和B/S并没有本 ...
- 编写轻量ajax组件01-对比webform平台上的各种实现方式
前言 Asp.net WebForm 和 Asp.net MVC(简称MVC) 都是基于Asp.net的web开发框架,两者有很大的区别,其中一个就是MVC更加注重http本质,而WebForm试图屏 ...
- 自己写的一个Pager分页组件,WebForm,Mvc都适用
我一说写这个功能的时候,好多人估计有疑问.分页功能网上多的是,搜一个不就行了,你这样不是浪费时间么.你说这句话的时候,我是比较信的,首先自己写一些东西是很耗时,有这些时间又能多打几盘LOL了.但是我觉 ...
- WebForm业务系列-会员功能
用了这么久的webform,还记得刚开始根本不知道程序要写成什么样,只知道功能实现了就行,有很多现实的问题都没考虑到.所以程序改了又改,最后连自己做的什么都不知道了.所以,现在来总结一下. 会员功能 ...
- WebForm基础--2016年12月27日
C/S:winform WPF 数据是存在其它的电脑上或服务器上需要从服务器上下载相应的数据,在本地电脑上的客户端里进行加工 数据加工的过程是在用户电脑上执行,会对用户的电脑配置有所要求 B/S:AS ...
- 在mvc里面有htmlhelper方法,在webform里面有什么?
终于是找到原来在webform里面已经提供了htmlcontrol这样的控件,可以直接拿来用.以前一直在想mvc有htmlhelper,webform里面不能用,其实是webform里面已经有了. 例 ...
- Webform Application传值 ViewState
Application:所有的会话共享一个Application空间,任何一个人改变Application的内容,其他人都会发现被改变了.Application中的内容不会被自动释放 存放位置:服务端 ...
随机推荐
- 玩转控件:封装Dev的SearchLookupEdit
鸣谢 随着前面几个章节对控件封装与扩展的分享,不少小伙伴儿们在作者公众号上反馈,并联系作者,表示通过这些系列和源码能学到不少细节上的东西,并运用到了自己的实际项目当中,也有不少伙伴儿反馈更好更优的处理 ...
- Blazor入门笔记(4)-组件的生命周期
1.环境 VS2019 16.5.1.NET Core SDK 3.1.200Blazor WebAssembly Templates 3.2.0-preview2.20160.5 2.简介 Blaz ...
- linux硬件资源问题排查:cpu负载、内存使用情况、磁盘空间、磁盘IO
在使用过程中之前正常的功能,突然无法使用,性能变慢,通常都是资源消耗问题,资源消耗可以从以下几个方面去排查.对于已经安装硬件资源监控软件(zabbix)的环境,直接使用硬件资源监控软件(zabbix) ...
- 根据银行卡号 获取银行名称及银行logo
根据银行卡号码获取银行卡归属地信息接口地址: https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8 ...
- CentOS 7 Docker安装
1. uname -a 查询机器信息,确保CPU为64位,且Linux内核在3.10版本以上 2. 更新yum包: yum update 3. 在 /etc/yum.repos.d下创建 docker ...
- Linux 定时实行一次任务命令
当我们想在指定的时间自动执行 一次 任务的时候,可以使用at命令 启动服务 使用时首先检查atq的服务是否启动 service atd status # 检查atd的状态 service atd st ...
- Blocked Billboard II题解--模拟到崩溃的模拟
前言 比赛真的状态不好(腐了一小会),导致差点爆0. 这个题解真的是在非常非常专注下写出来的,要不然真的心态崩. 题目 题目描述 奶牛Bassie想要覆盖一大块广告牌,她在之前已经覆盖了一小部分广告牌 ...
- mpvue怎么使用iconfont
原文链接:https://blog.csdn.net/weixin_39818813/article/details/80695750 1.首先去阿里巴巴矢量图标库区把你要图标加到购物车 阿里巴巴矢量 ...
- MTK Android MCC(移动国家码)和 MNC(移动网络码)
国际移动用户识别码(IMSI) international mobile subscriber identity 国际上为唯一识别一个移动用户所分配的号码. 从技术上讲,IMSI可以彻底解决国际漫游问 ...
- Java字符串的应用
字符串的简单应用 public class join { public static void main (String args[]){ String s1 = new String (" ...