Blazor实现高级表单功能
思路
- 添加Form组件类,提供Validate,OnSubmit等
- 添加Field组件基类,提供Id,Label,Value等
- 添加Field子组件Text、Password等表单字段组件
- 添加FormContext类,存储表单及字段数据
- 使用级联值组件传递FormContext实例(关键)
Form组件
public class FormContext { public Dictionary<string, Field> Fields { get; } } public class Form : BaseComponent { [Parameter] public RenderFragment ChildContent { get; set; } public FormContext Context { get; } public bool Validate() { return false; } protected override void BuildRenderTree(RenderTreeBuilder builder) { builder.Div(attr => { attr.Class(Style); builder.Component<CascadingValue<FormContext>>(attr => { attr.Add(nameof(CascadingValue<FormContext>.Value), Context); attr.Add(nameof(CascadingValue<FormContext>.ChildContent), ChildContent); }); }); } }
Field组件
public class Field : BaseComponent { [Parameter] public string Id { get; set; } [Parameter] public string Label { get; set; } [CascadingParameter] protected FormContext Context { get; set; } protected override void OnInitialized() { base.OnInitialized(); Context.Fields[Id] = this; } protected override void BuildRenderTree(RenderTreeBuilder builder) { } protected virtual void BuidChildContent(RenderTreeBuilder builder) {} } public class Text : Field { [Parameter] public string Icon { get; set; } [Parameter] public string Placeholder { get; set; } protected override void BuidChildContent(RenderTreeBuilder builder) { } } public class Password : Field { [Parameter] public string Icon { get; set; } [Parameter] public string Placeholder { get; set; } protected override void BuidChildContent(RenderTreeBuilder builder) { } }
Form示例
<Form @ref="form"> <Text Id="UserName" Icon="fa fa-user-o" Placeholder="用户名" /> <Password Id="Password" Icon="fa fa-lock" Placeholder="密码" /> <Button Text="登 录" OnClick="OnLogin" /> </Form> @code { private Form form; private void OnLogin() { if (!form.Validate()) return; } }
分类:
03 .NET技术
Known 是基于 Blazor 轻量级、跨平台、低代码、易扩展的插件开发框架。
源码:https://gitee.com/known/Known
源码:https://github.com/known/Known
如果对您有帮助,点击⭐Star⭐关注 ,感谢支持开源!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现