摘要: 1. 先说结论 我们为 ASP.NET Core 带来了全新的 WebForms 开发模式,可以让 20 年前的 WebForms 业务代码在最新的 ASP.NET Core 框架中运行,代码相似度99%! 一图胜万言! 白皮书下载:https://fineui.com/res/doc/FineUI 阅读全文
posted @ 2024-05-11 10:37 三生石上(FineUI控件) 阅读(7671) 评论(85) 推荐(37) 编辑
摘要: 引子 自从 2009 年开始在博客园写文章,这是目前我写的最长的一篇文章了。 前前后后,我总共花了 5 天的时间,每天超过 3 小时不间断写作和代码调试。总共有 8 篇文章,每篇 5~6 个小结,总截图数高达 60 多个。 俗话说,桃李不言下自成蹊。 希望我的辛苦和努力能得到你的认可,并对你的学习和 阅读全文
posted @ 2020-03-12 08:33 三生石上(FineUI控件) 阅读(12576) 评论(0) 推荐(104) 编辑
摘要: 目录 前言 Microsoft.AspNetCore.Mvc.ViewFeatures.Internal 消失了 升级到 ASP.NET Core 3.1 项目文件(.csproj) Program.cs Startup.cs ViewBag 与 Razor Pages 第一次接触 ViewBag 阅读全文
posted @ 2020-02-27 13:22 三生石上(FineUI控件) 阅读(8104) 评论(21) 推荐(18) 编辑
摘要: ASP.NET WebForms ASP.NET WebForms 随着微软 2002 年的 .Net Framework 一起发布,至今也将近 20 年的时间。相信很多人和我一样,对 WebForms 有着割舍不掉的感情, 直至今日 WebForms 仍然在管理系统快速开发领域有着不可替代的作用! 阅读全文
posted @ 2019-06-17 11:55 三生石上(FineUI控件) 阅读(23273) 评论(128) 推荐(26) 编辑
摘要: 前言 时间退回到 2009-09-26,为了演示开源项目 FineUI 的使用方法,我们发布了 AppBox(通用权限管理框架,包括用户管理、职称管理、部门管理、角色管理、角色权限管理等模块),最初的 AppBox 采用 Subsonic 作为 ORM 工具。 遗憾的是,Subsonic后来逐渐不再 阅读全文
posted @ 2018-08-27 10:50 三生石上(FineUI控件) 阅读(17510) 评论(150) 推荐(64) 编辑
摘要: 声明: 1. 本篇文章提到的仿 Bootstrap 风格的主题,是基于 jQuery 的 ASP.NET MVC 控件库的主题。 2. FineUIMvc(基础版)完全免费,可以用于商业项目。 目录 1. 2008年 - 经典蓝 2. 2013年 - 海王星蓝 3. 2014年 - 6 款 Metr 阅读全文
posted @ 2017-04-09 12:07 三生石上(FineUI控件) 阅读(13650) 评论(26) 推荐(31) 编辑
摘要: 声明:FineUIMvc(基础版)是免费软件,本系列文章适用于基础版。 《FineUIMvc随笔》目录 FineUIMvc随笔(1)动态创建表格列 FineUIMvc随笔(2)怎样在控件中嵌套 HTML FineUIMvc随笔(3)不能忘却的回发(__doPostBack) FineUIMvc随笔( 阅读全文
posted @ 2017-03-01 10:58 三生石上(FineUI控件) 阅读(7282) 评论(6) 推荐(8) 编辑
摘要: 目录 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6) 【第二篇】ASP.NET MVC快速入门之数据注解(MVC5+EF6) 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6) 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6) 【番 阅读全文
posted @ 2016-12-23 09:20 三生石上(FineUI控件) 阅读(83759) 评论(55) 推荐(139) 编辑
摘要: 开源版是 FineUI 的基石,从 2008 年至今已经持续发布了 120 多个版本,拥有会员 15,000 多位,捐赠会员达到 1,200 多位。FineUI(开源版)v4.2.2 是 8 年来的第 125 个版本,对表单、表格进行底层结构的重要调整,使其更简单更易于扩展,同时官网示例数也突破 3... 阅读全文
posted @ 2015-11-09 11:58 三生石上(FineUI控件) 阅读(6326) 评论(10) 推荐(5) 编辑
摘要: 特别声明:提供的源代码已经包含了 AppBoxPro 的全部源代码,用 VS2012 打开项目后,直接 Ctrl+F5 可以运行起来(默认使用VS自带的LocalDB数据库)。FineUIPro是商业程序,仅包含v1.7.0公测版的DLL;当然你也可以自行把 FineUIPro 换成 FineUI(... 阅读全文
posted @ 2014-10-17 10:33 三生石上(FineUI控件) 阅读(31472) 评论(37) 推荐(83) 编辑
摘要: 刚才询问博客园团队:【6年开源路】三石今日送福利,AppBox4.0源码免费拿!FineUI家族今日全部更新(FineUI + FineUI3to4 + FineUI.Design + AppBox)!http://www.cnblogs.com/sanshi/p/3577327.html我的文章有... 阅读全文
posted @ 2014-03-03 08:20 三生石上(FineUI控件) 阅读(20318) 评论(873) 推荐(804) 编辑
摘要: 在线阅读FineUI秘密花园(一) — 为什么选择FineUI?FineUI秘密花园(二) — 一切从头开始FineUI秘密花园(三) — 站点级别的配置FineUI秘密花园(四) — 页面级别的配置FineUI秘密花园(五) — 按钮控件FineUI秘密花园(六) — 表单控件FineUI秘密花园(七) — 上传控件FineUI秘密花园(八) — 下拉列表控件FineUI秘密花园(九) — 表单验证FineUI秘密花园(十) — Ajax特性FineUI秘密花园(十一) — 布局概述FineUI秘密花园(十二)—布局之锚点布局FineUI秘密花园(十三)—布局之行布局和列布局FineUI秘密 阅读全文
posted @ 2012-07-27 09:11 三生石上(FineUI控件) 阅读(35334) 评论(12) 推荐(22) 编辑
摘要: 前段时间我曾经对JavaScript中的应用技巧进行了收集和总结,形成了以下几篇文章。 这里我将会对这些应用技巧进行集中描述,如果你觉得遗漏了一些好用的应用技巧,也请在留言中提出,我会及时更新到这篇文章中的。 阅读全文
posted @ 2009-08-30 14:58 三生石上(FineUI控件) 阅读(13216) 评论(34) 推荐(31) 编辑

 

这是一篇4年前的文章:【经验分享】在ASP.NET Core中,如果禁用某个请求的模型验证?

事隔多年,又有网友问到这个问题。我就来重新整理一下,顺便扩展一下之前的解决办法。

 

=====

这是一个来自网友【David】的提问。在 AppBoxCore 项目的新增用户页面,新增一个上传按钮:

1
2
3
4
5
<f:FileUpload ID="filePhoto" ShowRedStar="false" ShowEmptyLabel="true" ButtonText="上传个人头像"
ButtonOnly="true" Required="false" ButtonIcon="ImageAdd"
OnFileSelected="@Url.Handler("filePhoto_FileSelected")"
OnFileSelectedFields="filePhoto">
</f:FileUpload>

  

后台代码:

1
2
3
4
5
6
7
8
9
10
11
public IActionResult OnPostFilePhoto_FileSelected(IFormFile filePhoto, IFormCollection values)
{
    if (filePhoto != null)
    {
        string fileName = filePhoto.FileName;
 
        // 。。。
    }
 
    return UIHelper.Result();
}

  

此时上传照片时,会弹出错误提示框(截图所示)。

The 用户名 field is required.
The 邮箱 field is required.
The 性别 field is required.
The 密码 field is required.

 

这是因为页面模型中定义了一个绑定属性:

1
2
3
4
5
6
7
8
[CheckPower(Name = "CoreUserNew")]
public class UserNewModel : BaseAdminModel
{
    [BindProperty]
    public User CurrentUser { get; set; }
 
    // ...
}

  

而在 POST 请求中会触发模型绑定,如果发现模型不完整就会报错。这个错误提示框是由 FineUICore 框架处理的,无需自己写代码。

现在问题就来了!

====================
对于上述场景,仅仅是上传图片而无需验证 CurrentUser 模型属性,该如何处理呢?

其实也很简单,只需要在处理器中清空模型状态就可:

1
2
3
4
5
6
7
8
9
10
11
12
13
public IActionResult OnPostFilePhoto_FileSelected(IFormFile filePhoto, IFormCollection values)
{
    ModelState.Clear();
 
    if (filePhoto != null)
    {
        string fileName = filePhoto.FileName;
 
        // 。。。
    }
 
    return UIHelper.Result();
}

  

 

Done!

====================
这个问题也确实让我走了不少弯路,刚开始总想着如何禁用某些POST请求的模型验证,想着微软总能为处理器(Handler)提供一些注解(Annotation)来吧,结果查了一圈没有发现!

后来,想着换个思路:既然找不到禁用的方法,就清空模型状态,结果也是一样的。

 

 

 

延伸思考
============================
上面既然可以使用ModelState.Clear();清空所有的模型状态,那是否也可以移除模型状态中的某些属性呢?

以用户登录表单为例(用户名+密码),先看下模型定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
namespace FineUICore.Examples.WebForms.Pages.DataModel.Models
{
    public class User
    {
        [Required]
        [Display(Name = "用户名")]
        [StringLength(20)]
        public string UserName { get; set; }
 
        [Required(ErrorMessage = "用户密码不能为空!", AllowEmptyStrings = true)]
        [Display(Name = "密码")]
        [MaxLength(9, ErrorMessage = "密码最大为 9 个字符!")]
        [MinLength(3, ErrorMessage = "密码最小为 3 个字符!")]
        [DataType(DataType.Password)]
        [RegularExpression("^(?:[0-9]+[a-zA-Z]|[a-zA-Z]+[0-9])[a-zA-Z0-9]*$", ErrorMessage = "密码至少包含一个字母和数字!")]
        public string Password { get; set; }
 
    }
}

  

 

页面模型中,定义一个名为 CurrentUser 的绑定属性:

1
2
[BindProperty]
public User CurrentUser { get; set; }

  

在页面视图中,将用户名和密码通过两个文本输入框渲染到页面中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<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 For="CurrentUser.UserName"></f:TextBox>
                @* <f:TextBox For="CurrentUser.Password"></f:TextBox> *@
            </Items>
        </f:SimpleForm>
    </Items>
    <Toolbars>
        <f:Toolbar Position="Bottom" ToolbarAlign="Right" ID="Toolbar1">
            <Items>
                <f:Button OnClick="btnLogin_Click" OnClickFields="SimpleForm1" ValidateTarget="Top" ValidateForms="SimpleForm1" Type="Submit" Text="登录" ID="btnLogin"></f:Button>
                <f:Button Type="Reset" Text="重置" ID="btnReset"></f:Button>
            </Items>
        </f:Toolbar>
    </Toolbars>
</f:Window>

  

注意,上述代码中我们注释掉了 CurrentUser.Password,以便在后台验证模型状态验证失败的情况。

此时提交表单,FineUICore会自动弹出模型验证失败的消息,如下图所示。

 

这个逻辑上是没有问题的,那个弹出框提示是FineUICore系统处理的(无需用户编码),看下事件处理函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public IActionResult OnPostBtnLogin_Click()
{
    if (ModelState.IsValid)
    {
        if (CurrentUser.UserName == "admin" && CurrentUser.Password == "admin888")
        {
            ShowNotify("成功登录!", MessageBoxIcon.Success);
        }
        else
        {
            ShowNotify(String.Format("用户名({0})或密码({1})错误!",
                CurrentUser.UserName,
                CurrentUser.Password), MessageBoxIcon.Error);
        }
    }
 
    return UIHelper.Result();
}

  

为了从模型验证状态中移除某些属性,我们可以直接这么写:

1
2
3
4
5
6
7
8
9
10
public IActionResult OnPostBtnLogin_Click()
{
    ModelState.Remove("CurrentUser.Password");
 
    if (ModelState.IsValid)
    {
    ...
    }
 
}

  

参考文章:https://stackoverflow.com/questions/16266988/exclude-fields-from-model-validation

上述文章指出,调用 ModelState.Remove() 方法虽然不够优雅,但是可以快速解决问题。更加优雅的做法是自定义一个单独的视图模型,示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class PersonViewModel
{
    [Required]
    public String FirstName { get; set; }
 
    [Required]
    public String LastName { get; set; }
}
 
public class PersonWithEmailViewModel : PersonViewModel
{
    [Required]
    public String Email { get; set; }
}

  

posted @ 2024-05-16 08:00 三生石上(FineUI控件) 阅读(589) 评论(2) 推荐(3) 编辑
摘要: ASP.NET Core RazorPages中,我们可以在页面模型基类中重载OnPageHandlerExecuting方法。 下面的例子中,BaseModel继承自 PageModel,是所有页面模型的基类。 推荐方案:在BaseModel.cs中,重载OnPageHandlerExecutin 阅读全文
posted @ 2024-05-15 15:32 三生石上(FineUI控件) 阅读(656) 评论(1) 推荐(2) 编辑
摘要: FineUIPro/Mvc/Core v8.0.0 正式发布了,这个版本推出高性能延迟渲染表格和期待已久的卡片渲染模式,并对主题配色进行优化调整! 相关文章: 《致广大 FineUI 网友的一封公开信》 【新特性速递】表格加载速度足足 3 倍提升,爱了爱了 【新特性速递】填一个坑 - 修正页面中使用 阅读全文
posted @ 2021-12-19 20:33 三生石上(FineUI控件) 阅读(5695) 评论(4) 推荐(3) 编辑
摘要: FineUI 的下个版本(v8.0.0),我们会为表格增加卡片样式,相信这是一个很多网友期待已久的功能。 网友的反馈 很久很久之前,就有网友在最初的 BBS 论坛提到这个事情,由于当时在忙着更新其他更重要的功能,所以这个提议一直处于搁置状态。 去年,网友 @漫步者 在我们的官方社区再次提出这个问题, 阅读全文
posted @ 2021-11-16 11:52 三生石上(FineUI控件) 阅读(840) 评论(2) 推荐(1) 编辑
摘要: FineUI 的下个版本(v8.0.0),我们特邀资深UI设计师对我们的整体界面风格进行优化调整,今天给大家带来更漂亮的样式主题风格。 智能树控件样式优化 v7.1.1: v8.0.0: 能看出其中的差别吗? 新版本 v8.0 对启用标题栏样式的智能树控件(HeaderStyle=true,AllH 阅读全文
posted @ 2021-11-05 23:02 三生石上(FineUI控件) 阅读(933) 评论(1) 推荐(0) 编辑
摘要: FineUI 的下个版本(v8.0.0),我们会为选项卡新增 TabTitleVertical 属性,一般用于在左侧或者右侧显示中文选项卡标题,这样就不会再费脖子了。 网友贡献代码 最初这个问题是由网友 @没想好 在知识星球内提出的,并给出了解决方案。 我就依葫芦画瓢,在FineUI中重新实现了一遍 阅读全文
posted @ 2021-11-02 22:31 三生石上(FineUI控件) 阅读(515) 评论(0) 推荐(0) 编辑
摘要: 提出问题 昨天一位网友提出了这么一个问题:动态创建Disabled的文本输入框,页面回发时修改其文本属性无效: 分析问题 为了更清楚的分析和解决问题,我们先把代码和运行效果展示一下。 <f:PageManager ID="PageManager1" runat="server"></f:PageMa 阅读全文
posted @ 2021-11-01 12:17 三生石上(FineUI控件) 阅读(801) 评论(5) 推荐(2) 编辑
摘要: FineUI 的下个版本(v8.0.0),我们会为表格新增CheckBoxSelectAutoHide属性,用来自动隐藏多选框,只在行获得焦点或者选中行时显示多选框,类似 Windows 的资源管理器风格。 先睹为快 要实现这个效果,只需要为普通的表格增加如下两个属性即可: EnableCheckB 阅读全文
posted @ 2021-10-20 22:41 三生石上(FineUI控件) 阅读(548) 评论(0) 推荐(1) 编辑
摘要: FineUI 的下个版本(v8.0.0),我们会填一个存在了好多年的坑,以防止大家无意中采坑。 问题回顾 这个问题之前有网友多次遇到: 解决问题 出现这个问题的概率不是很高,需要同时满足如下条件: Web.config中启用了 DebugMode 页面中包含富文本编辑器,并且其中保存了大量的富文本 阅读全文
posted @ 2021-10-10 12:04 三生石上(FineUI控件) 阅读(624) 评论(0) 推荐(0) 编辑
摘要: FineUI 的下个版本(v8.0.0),我们会为表格新增延迟加载功能(EnableDelayRender),从而使得典型表格页面加载性能提升 3 倍以上! 大数据表格 FineUI很早之前就已经支持大数据表格了,对于需要一次性展示超过 1000 条数据的纯展示场景非常有用。 官网示例:FineUI 阅读全文
posted @ 2021-10-04 15:50 三生石上(FineUI控件) 阅读(2894) 评论(7) 推荐(4) 编辑
摘要: 注:本版本会于 2021-6-28 准时更新到社区。 FineUIPro/Mvc/Core v7.1.1 正式发布了,这个版本主要是BUG修正,建议所有用户升级到此版本! 下面先来回顾下每次发布大版本的关键时间点: 序曲:2008年 - 2017年,基于 ExtJS 的开源版本,长达 9 年的时间内 阅读全文
posted @ 2021-06-24 09:57 三生石上(FineUI控件) 阅读(741) 评论(0) 推荐(0) 编辑
摘要: 上一篇讨论中(https://t.zsxq.com/yVBaaUb),大家基本上都认同微软在 RazorPages 上的创新,并且实实在在的 RazorPages 在页面组织上有很大的便利,再配上 FineUICore 不遗余力推出的类似 WebForms 的 TagHelpers 标签,让开发变得 阅读全文
posted @ 2021-02-02 14:27 三生石上(FineUI控件) 阅读(437) 评论(0) 推荐(0) 编辑
摘要: https://fineui.com/fans/ 阅读全文
posted @ 2021-01-26 12:03 三生石上(FineUI控件) 阅读(429) 评论(0) 推荐(0) 编辑
摘要: FineUIPro/Mvc/Core v7.1.0 正式发布了,这个版本支持了多文件上传,WebForms版修正了一个通杀.Net Framework的XSS漏洞,基础版也第一次支持了智能树控件和响应式布局! 下面先来回顾下每次发布大版本的关键时间点: 序曲:2008年 - 2017年,基于 Ext 阅读全文
posted @ 2021-01-26 10:24 三生石上(FineUI控件) 阅读(1334) 评论(1) 推荐(1) 编辑
点击右上角即可分享
微信分享提示