【基础版限时免费】致敬WebForms,ASP.NET Core也能这么玩!

ASP.NET WebForms

ASP.NET WebForms 随着微软 2000 年的 .Net Framework 一起发布,至今也将近 20 年的时间。相信很多人和我一样,对 WebForms 有着割舍不掉的感情, 直至今日 WebForms 仍然在管理系统快速开发领域有着不可替代的作用!

基于 ASP.NET WebForms 的 FineUI(开源版)在结束了 9 年 130 个版本的迭代后,继任者 FineUIPro(企业版)也持续了 5 年 30 多个版本的迭代,目前已经非常成熟稳定,超过 300 家企业客户每天都在使用 FineUIPro(企业版)构建各类管理系统。

FineUIPro(企业版)在线示例:https://pro.fineui.com/

为了对比 ASP.NET WebForms,MVC和Core开发页面的差异,下面我们以简单的登录页面为例:

这是一个相当简单的页面,通过如下控件的嵌套组合来显示页面效果:

-Window(登录表单)

----SimpleForm

--------TextBox(用户名)

--------TextBox(密码)

----Toolbar

--------Button(登录)

--------Button(重置)

前台标签化页面代码很简单,注意每个控件都有一个 runat=server 属性:

<f:Window Width="350" WindowPosition="GoldenSection" EnableClose="false" IsModal="false" Title="登录表单" ID="Window1" runat="server">
    <Items>
        <f:SimpleForm ShowHeader="false" BodyPadding="10" ShowBorder="false" ID="SimpleForm1" runat="server">
            <Items>
                <f:TextBox ShowRedStar="true" Required="true" Label="用户名" ID="tbxUserName" runat="server"></f:TextBox>
                <f:TextBox ShowRedStar="true" Required="true" TextMode="Password" Label="密码" ID="tbxPassword" runat="server"></f:TextBox>
            </Items>
        </f:SimpleForm>
    </Items>
    <Toolbars>
        <f:Toolbar Position="Bottom" ToolbarAlign="Right" ID="Toolbar1" runat="server">
            <Items>
                <f:Button Type="Submit" ID="btnLogin" Text="登录" ValidateTarget="Top" ValidateForms="SimpleForm1"
                          OnClick="btnLogin_Click" runat="server"></f:Button>
                <f:Button Type="Reset" Text="重置" ID="btnReset" EnablePostBack="false" runat="server"></f:Button>
            </Items>
        </f:Toolbar>
    </Toolbars>
</f:Window>

后台是经典的事件响应函数:

protected void btnLogin_Click(object sender, EventArgs e)
{
    if (tbxUserName.Text == "admin" && tbxPassword.Text == "admin")
    {
        ShowNotify("成功登录!", MessageBoxIcon.Success);
    }
    else
    {
        ShowNotify("用户名或密码错误!", MessageBoxIcon.Error);
    }
}

ASP.NET WebForms实现的登录页面:https://pro.fineui.com/#/basic/login.aspx

ASP.NET MVC

也许是为了迎合当下的流行趋势,微软于 2010 年推出了 MVC 架构的 ASP.NET MVC 框架。

我们也在 2016 年推出了支持 ASP.NET MVC 的控件库 FineUIMvc,在线示例:https://mvc.fineui.com/

经典的 MVC 架构,对于 WebForms 开发人员还是有很多新的概念,比如视图,控制器,模型,路由,视图模型,以及微软为了方便路由配置而引入的Areas特性等等。

由此带来的一个重要区别是目录结构不一致:

  • WebForms中,页面(login.aspx)和后台文件(login.aspx.cs)在同一个目录下。
  • MVC中,视图(Login/Index.cshtml)和控制器(LoginController.cs)分别在不同的目录下。

下面两幅图片展示了这种差别:

可以毫不客气的说,MVC中的这种做法虽然更加接近传统的MVC味道,但是对开发人员却不友好!

FineUIMvc中的视图对应于 WebForms 的页面,使用的是 Razor Html Helpers ,下面来看下登录页面的视图代码:

@(F.Window().Width(350).WindowPosition(WindowPosition.GoldenSection).EnableClose(false).IsModal(false).Title("登录表单").ID("Window1")
    .Items(
        F.SimpleForm().ShowHeader(false).BodyPadding(10).ShowBorder(false).ID("SimpleForm1")
            .Items(
                F.TextBox().ShowRedStar(true).Required(true).Label("用户名").ID("tbxUserName"),
                F.TextBox().ShowRedStar(true).Required(true).TextMode(TextMode.Password).Label("密码").ID("tbxPassword")
            )
    )
    .Toolbars(
        F.Toolbar().Position(ToolbarPosition.Bottom).ToolbarAlign(ToolbarAlign.Right).ID("Toolbar1")
            .Items(
                F.Button().OnClick(Url.Action("btnLogin_Click"), "SimpleForm1").ValidateTarget(Target.Top).ValidateForms("SimpleForm1").Type(ButtonType.Submit).Text("登录").ID("btnLogin"),
                F.Button().Type(ButtonType.Reset).Text("重置").ID("btnReset")
            )
    )
)

是的,其实这里的视图就是 C# 的函数调用而已,虽然很灵活,但是和我们之前所认知的标签写法有很大的出入。

WebForms和MVC另一个重要的区别点:

  • WebForms通过 ViewState 来保持前后台控件的状态,因此在后台事件处理函数中,可以方便的拿到页面上每个控件的属性!
  • MVC的实现更加轻量级,后台对于前台状态一无所知,任何后台需要的状态都需要前台显式传入!

这个重要的差异点体现在 OnClick 函数的第二个参数 SimpleForm1,它告诉 FineUIMvc 把 SimpleForm1 里面所有子控件的关键数据传入后台。

下面看下后台代码,对应于控制器方法:

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult btnLogin_Click(IFormCollection values)
{
    if (values["tbxUserName"] == "admin" && values["tbxPassword"] == "admin")
    {
        ShowNotify("成功登录!", MessageBoxIcon.Success);
    }
    else
    {
        ShowNotify("用户名或密码错误!", MessageBoxIcon.Error);
    }

    return UIHelper.Result();
}

ASP.NET MVC实现的登录页面:https://mvc.fineui.com/#/Basic/Login

ASP.NET Core (Razor Pages & Tag Helpers)

2016年,微软在新领袖纳德拉的领导下,走上了开源之路,并推出重量级的跨平台开源框架 .Net Core!

作为 ASP.NET MVC 的继任者,ASP.NET Core 不仅开源免费,而且可以在  Windows、macOS 和 Linux 上开发和部署,这是前几年做梦都想不到的事情。

FineUI紧跟历史潮流,及时于 2017 年推出了支持 ASP.NET Core 的控件库 FineUICore,在线示例:https://core.fineui.com/

然而 WebForms 和 MVC 之间的鸿沟,阻止了很多 WebForms 开发人员的升级之路。

微软应该是深刻认识到了这一点,在ASP.NET Core 2.0版本中推出了 Razor Pages,简化了Controller-View-Model的组织结构,现在看起来更有WebForms的感觉了:

本着一切为了简化开发人员的劳动,FineUICore终于在近期发布的 v5.5.0 完美支持 ASP.NET Core 的 Razor Pages 和 Tag Helper!

FineUICore with Razor Pages & Tag Helper 的在线示例:https://pages.fineui.com/

我们的目的是让 ASP.NET Core 的页面和 ASP.NET WebForms 的页面看起来尽量一致,这样可以大大减轻开发人员从 ASP.NET WebForms 迁移到 ASP.NET Core 的繁重劳动!

看下 FineUICore 实现的登录页面代码:

<f:Window Width="350" WindowPosition="GoldenSection" EnableClose="false" IsModal="false" Title="登录表单" ID="Window1">
    <Items>
        <f:SimpleForm ShowHeader="false" BodyPadding="10" ShowBorder="false" ID="SimpleForm1">
            <Items>
                <f:TextBox ShowRedStar="true" Required="true" Label="用户名" ID="tbxUserName"></f:TextBox>
                <f:TextBox ShowRedStar="true" Required="true" TextMode="Password" Label="密码" ID="tbxPassword"></f:TextBox>
            </Items>
        </f:SimpleForm>
    </Items>
    <Toolbars>
        <f:Toolbar Position="Bottom" ToolbarAlign="Right" ID="Toolbar1">
            <Items>
                <f:Button Type="Submit" ID="btnLogin" Text="登录" ValidateTarget="Top" ValidateForms="SimpleForm1"
                          OnClick="@Url.Handler("btnLogin_Click")" OnClickFields="SimpleForm1"></f:Button>
                <f:Button Type="Reset" Text="重置" ID="btnReset"></f:Button>
            </Items>
        </f:Toolbar>
    </Toolbars>
</f:Window>

等等!这不就是前面的 WebForms 页面代码吗???哦,不对,少了 runat=server,然后,....嗯....,没有然后了。

为了对比登录页面在 ASP.NET WebForms 和 ASP.NET Core 下的差异,我们用对比工具测试了一下:

这里能看到的差异点只有两个:

  • ASP.NET WebForms的控件多了个runat=server属性
  • ASP.NET Core的控件事件处理有点差别,需要指定传入后台的参数(OnClickFields)

是不是很简单,现在不用怕从 WebForms 升级到 ASP.NET Core了吧!

而后台的事件处理函数(嗯,这个是WebForms的术语,MVC中叫控制器方法,ASP.NET Core with Razor Pages可称之为页面模型处理器)和 MVC 的保持一致:

public IActionResult OnPostBtnLogin_Click(IFormCollection values)
{
    if (values["tbxUserName"] == "admin" && values["tbxPassword"] == "admin")
    {
        ShowNotify("成功登录!", MessageBoxIcon.Success);
    }
    else
    {
        ShowNotify("用户名或密码错误!", MessageBoxIcon.Error);
    }

    return UIHelper.Result();
}

说白了,FineUICore的一切努力都是为了简化开发人员的劳动,让 ASP.NET Core 有一副 WebForms 的清纯外表和MVC的火热内心!

ASP.NET Core实现的登录页面:https://core.fineui.com/#/Basic/Login

示例源代码下载

以上介绍的三个产品非免费软件,你可以加入【三石和他的朋友们】知识星球下载基础版(基础版下载后可永久免费商用!)

不忘初心,方得始终!

============================================================

FineUICore(基础版)限时免费

2019-06-30之前在本文下面发表评论,即可免费获取FineUICore(基础版):

注:

  • 评论内容必须有意义,不能是无脑的拷贝粘贴,或者无心的支持支持
  • 请不要留电子邮件,防止个人信息泄露,我们会发站内消息
  • 2019-06-20新版发布之后,才会发站内消息,请耐心等待!

============================================================

原文地址:https://www.cnblogs.com/sanshi/p/11017648.html

时间: 2024-07-31 03:06:25

【基础版限时免费】致敬WebForms,ASP.NET Core也能这么玩!的相关文章

【转载】从头编写 asp.net core 2.0 web api 基础框架 (1)

工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相关知识就不介绍了, 这里主要是从头编写一个asp.net core 2.0 web api的基础框架. 我一直在关注asp.net core 和 angular 2/4, 并在用这对开发了一些比较小的项目. 现在我感觉是时候使用这两个技术去为企业开发大一点的项目了, 由于企业有时候需要SSO(单点登

从头编写 asp.net core 2.0 web api 基础框架 (1)

原文:从头编写 asp.net core 2.0 web api 基础框架 (1) 工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相关知识就不介绍了, 这里主要是从头编写一个asp.net core 2.0 web api的基础框架. 我一直在关注asp.net core 和 angular 2/4, 并在用这对开发了一些比较小的项目. 现在我感

ASP.NET Core中间件(Middleware)实现WCF SOAP服务端解析

ASP.NET Core中间件(Middleware)进阶学习实现SOAP 解析. 本篇将介绍实现ASP.NET Core SOAP服务端解析,而不是ASP.NET Core整个WCF host. 因为WCF中不仅仅只是有SOAP, 它还包含很多如消息安全性,生成WSDL,双工信道,非HTTP传输等. ASP.NET Core 官方推荐大家使用RESTful Web API的解决方案提供网络服务. SOAP 即 Simple Object AccessProtocol 也就是简单对象访问协议.

从零开始学 ASP.NET Core 与 EntityFramework Core 目录

从零开始学 ASP.NET Core 与 EntityFramework Core 介绍 我是一个目录,它旨在帮助开发者循序渐进的了解 ASP.NET Core 和 Entity Framework Core . 文章会随着版本进行更新,关注我获取最新版本 目标 我们将详细讨论和学习: .NET 平台 ASP.NET Core ASP.NET Core MVC ASP.NET Identity Core Entity Framework Core 适用对象 学习本书的前置条件只需要你有一点 C#

【官方下载】EasyCMDB官方基础版免费下载使用!

链接??:https://github.com/easycmdb/easycmdb EasyCMDB是优维科技基于多年IT需求管理和项目实践,打破传统CMDB资产管理的局限,从应用视角出发,管理企业一切软硬件IT资源,提供准确信息供上层平台及周边系统场景消费的产品. 优维EasyCMDB基础版,以应用管理为维度,通过应用变更的维度来覆盖资源管理的范围,支持资源建模.配置自动发现.资源维护,实现应用管理资源的配置管控能力,构建应用管理的资源基础. 平台亮点 管理IaaS,PaaS,SaaS层一切I

Pro ASP.NET Core MVC 第6版 第一章

第一章 ASP.NET Core MVC 的前世今生 ASP.NET Core MVC 是一个微软公司开发的Web应用程序开发框架,它结合了MVC架构的高效性和简洁性,敏捷开发的思想和技术,和.NET 平台的最好的部分.在本章,我们将学习为什么微软创建ASP.NET Core MVC, 看看他和他的前辈的比较以及和其他类似框架的比较,最后,大概讲一下ASP.NET core MVC里面有什么新东西,还有本书中包括哪些内容. 了解ASP.NET Core MVC的历史 最开始的ASP.NET 诞生

Pro ASP.NET Core MVC 第6版 第二章(前半章)

目录 第二章 第一个MVC 应用程序 学习一个软件开发框架的最好方法是跳进他的内部并使用它.在本章,你将用ASP.NET Core MVC创建一个简单的数据登录应用.我将它一步一步地展示,以便你能看清楚怎样构建一个MVC 应用程序.为了让事情简单,我跳过了一些技术细节,但是不要担心,如果你是一个MVC的新手,你将会发现许多东西足够提起你的兴趣.因为我用的东西有些没做解释,所以我提供了一些参考以便你可以看到所有的细节的东西. 安装Visual Studio 要想根据本书实践的话,必须安装Visua

镜像公测招募啦!!!用镜像开通云服务器,限时免费体验!!

有好的网页设计却不懂复杂的云服务器基础环境配置? 复杂的配置,层出不穷的问题,无法专注于开展业务? 5月6日即将上线的阿里云镜像市场,集中了适用于网站建设.应用开发的基础环境镜像.轻松管理和备份站点的工具镜像-- 从此上云零门槛!!! 现在马上报名成为第一批云服务器"即开即用"的体验者,将您的测评体验跟帖反馈~! 您将获得免费体验ECS云服务器的宝贵机会!!! 活动时间:4月28日-5月5日 如果您满足以下任一条件: ·  熟悉windows/centos/ubuntu操作系统: · 

如何在ASP.NET Core中实现一个基础的身份认证

注:本文提到的代码示例下载地址> How to achieve a basic authorization in ASP.NET Core 如何在ASP.NET Core中实现一个基础的身份认证 ASP.NET终于可以跨平台了,但是不是我们常用的ASP.NET, 而是叫一个ASP.NET Core的新平台,他可以跨Windows, Linux, OS X等平台来部署你的web应用程序,你可以理解为,这个框架就是ASP.NET的下一个版本,相对于传统ASP.NET程序,它还是有一些不同的地方的,比