前言

现在有人谈起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 最后的黄昏之力的更多相关文章

  1. WebForm获取GET或者POST参数到实体的转换,ADO.NET数据集自动转换实体

    最近在修改维护以前的webform项目(维护别人开发的.....)整个aspx没有用到任何的控件,这个我也比较喜欢不用控件所以在提交信息的时候需要自己手动的去Request.QueryString[] ...

  2. Webform:Application、ViewState对象的用法

    Application Application对象的作用范围是整个全局,也就是说对所有用户都有效.它在整个应用程序生命周期中都是有效的,类似于使用全局变量一样,所以可以在不同页面中对它进行存取.它和S ...

  3. webform开发基础

    ASP.NET WebForm C/S(Client/Server):客户端服务器 B/S(Browser/Server):浏览器服务器 C/S和B/S的区别: 首先必须强调的是C/S和B/S并没有本 ...

  4. 编写轻量ajax组件01-对比webform平台上的各种实现方式

    前言 Asp.net WebForm 和 Asp.net MVC(简称MVC) 都是基于Asp.net的web开发框架,两者有很大的区别,其中一个就是MVC更加注重http本质,而WebForm试图屏 ...

  5. 自己写的一个Pager分页组件,WebForm,Mvc都适用

    我一说写这个功能的时候,好多人估计有疑问.分页功能网上多的是,搜一个不就行了,你这样不是浪费时间么.你说这句话的时候,我是比较信的,首先自己写一些东西是很耗时,有这些时间又能多打几盘LOL了.但是我觉 ...

  6. WebForm业务系列-会员功能

    用了这么久的webform,还记得刚开始根本不知道程序要写成什么样,只知道功能实现了就行,有很多现实的问题都没考虑到.所以程序改了又改,最后连自己做的什么都不知道了.所以,现在来总结一下. 会员功能 ...

  7. WebForm基础--2016年12月27日

    C/S:winform WPF 数据是存在其它的电脑上或服务器上需要从服务器上下载相应的数据,在本地电脑上的客户端里进行加工 数据加工的过程是在用户电脑上执行,会对用户的电脑配置有所要求 B/S:AS ...

  8. 在mvc里面有htmlhelper方法,在webform里面有什么?

    终于是找到原来在webform里面已经提供了htmlcontrol这样的控件,可以直接拿来用.以前一直在想mvc有htmlhelper,webform里面不能用,其实是webform里面已经有了. 例 ...

  9. Webform Application传值 ViewState

    Application:所有的会话共享一个Application空间,任何一个人改变Application的内容,其他人都会发现被改变了.Application中的内容不会被自动释放 存放位置:服务端 ...

随机推荐

  1. Codeforces Round #623 (Div. 2, based on VK Cup 2019-2020 - Elimination Round, Engine)

    A. Dead Pixel(思路) 思路 题意:给我们一个m*n的表格,又给了我们表格中的一个点a,其坐标为(x, y),问在这个表格中选择一个不包括改点a的最大面积的矩形,输出这个最大面积 分析:很 ...

  2. python编程心得(1)

    1.创建字典     字典名 = {键名1:键值1,键名2:键值2,...}     sanguo = {"诸葛亮草船借箭":"满载而归","关公赴会 ...

  3. 【Redis】集群NetCore实战

    环境准备 1. Redis集群(Windows集群搭建) 启动Redis集群,给每个节点加上Title start .conf start .conf start .conf start .conf ...

  4. psutil运维必会模块

    目录 psutil介绍 安装psutil 获取CPU信息 获取内存信息 获取磁盘信息 获取网络信息 获取进程信息 psutil介绍 用Python来编写脚本简化日常的运维工作是Python的一个重要用 ...

  5. MyBatis(三):核心配置文件的重要配置

    本文是按照狂神说的教学视频学习的笔记,强力推荐,教学深入浅出1便就懂!b站搜索狂神说即可 https://space.bilibili.com/95256449?spm_id_from=333.788 ...

  6. 《操作系统》课程笔记(Ch01-导论)

    Ch01 - 导论 操作系统的功能 用户视角:在乎使用方便,不在乎资源利用 系统视角:资源分配器.控制程序 计算机系统的运行 启动:利用固件(Firmware)中的引导程序(Bootstrap Pro ...

  7. docker 私有仓库 删除镜像

    1.查找官方删除法 https://github.com/burnettk/delete-docker-registry-image 2.民用删除法 https://segmentfault.com/ ...

  8. Struts2-学习笔记系列(15)-ajax支持和JSON

    7.1stream类型的result 使用stream就无需jsp页面,直接在action想浏览者生成指定的响应 @Override public java.lang.String execute() ...

  9. Chrome浏览器架构

    通用浏览器架构 它可以是一个具有许多不同线程的进程,也可以是具有几个通过IPC进行通信的多个线程的进程. 一个具有许多不同线程的进程 通过IPC进行通信的多个线程的进程 注意 这些不同的体系结构是实现 ...

  10. floyd最小环&&模板

    floyd的核心代码: ;k<=n;k++){ ;i<=n;i++){ ;j<=n;j++){ dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j] ...