目录

介绍

使用代码

_Host.cshtml

site.js

JQDatePicker.razor

JQDatePicker.razor.cs

如何使用?

DatePicker.razor


介绍

在我使用Blazor.net的一项作业中,很少有表单具有输入控件作为日期选择器日历。根据业务逻辑的自定义需求不可能使用EditForm中的当前Blazor InputDate组件实现。下面列出了一些限制使用默认组件的逻辑:

  1. 限制日期,如开始日期和结束日期,或者限制未来或过去的日期
  2. 输入字段格式

以上几点可以在以后的版本中实现,但为了完成开发,我们选择使用Jquery。了解使用Blazor限制JavaScript在应用程序中的使用,当前版本不完全满足开发条件。希望未来的版本更新相同。我们可以使用第三方组件,但由于某些政策而受到限制。因此,为了清除开发障碍,我们决定使用jquery datepicker并创建一个可以在整个过程中使用的自定义组件。

下面是相同的代码以及如何在不同场景中使用它的解释。

使用代码

代码就像一个简单的插件,只需配置组件并在应用程序中使用它。下面是相同的代码。

_Host.cshtml

提供对jquery库的引用。请注意site.js是一个自定义js,其代码如下所示:

<script src="js/Jquery-3.5.1.min.js"></script>
<script src="jquery-ui-1.12.1/jquery-ui.min.js"></script>
<script src="js/site.js"></script>

site.js

window.siteFunction={InitDatePickerwithSelect: function (element, formatDate, minDate, maxDate) {$(element).datepicker('destroy');$(element).datepicker({showOtherMonths: true,selectOtherMonths: true,changeMonth: true,changeYear: true,dateFormat: formatDate,minDate: minDate == null ? null : new Date(minDate),maxDate: maxDate == null ? null : new Date(maxDate),onSelect: function (date) {var myElement = $(this)[0];var event = new Event('change');myElement.dispatchEvent(event);}});},SetMinMaxDate: function (element, minDate, maxDate) {var min = minDate == null ? null : new Date(minDate);var max = maxDate == null ? null : new Date(maxDate);$(element).datepicker('option', 'minDate', min);$(element).datepicker('option', 'maxDate', max);}
}

JQDatePicker.razor

根据以下代码在项目的共享UI文件夹中创建一个razor组件。例如,BlazorApp/Pages/Component

<input type="text" id="@(Id)" class="form-control datepicker @(Class)" data-provide="datepicker"disabled="@Disabled"@ref="currentElement"@bind-value="BindValue"@bind-value:event="oninput"@bind-value:format="@Format"@onchange="OnChange" />

JQDatePicker.razor.cs

在razor组件所在的文件夹中创建与上述相同的razor.cs类。以下代码充当创建的razor页面的后端代码。

#region Microsoft References
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
#endregion#region System References
using System;
using System.Threading.Tasks;
#endregionnamespace BlazorApp.Pages.Components
{
public partial class JQDatePicker{#region Parameter[Parameter] public DateTime? Value { get=>_value; set{if(_value==value) return;_value=value;ValueChanged.InvokeAsync(Value);} }[Parameter] public string Format { get; set; }[Parameter] public EventCallback<DateTime?> ValueChanged {get;set;}[Parameter] public string Id { get; set; }[Parameter] public string Class { get; set; }[Parameter] public bool Disabled { get; set; }[Parameter] public DateTime? MinDate { get; set; }[Parameter] public DateTime? MaxDate { get; set; }#endregion#region Inject[Inject] IJSRuntime JSRuntime { get; set; }#endregionprivate DateTime? _value ;private string DatePickerFormat { get; set; }ElementReference currentElement { get; set; }#region Protected Method/// <summary>/// Method to initialize variable on component initialization/// </summary>protected override async Task OnInitializedAsync(){Format = string.IsNullOrEmpty(Format) ? "dd/MMM/yyyy" : Format;DatePickerFormat = string.IsNullOrEmpty(DatePickerFormat) ? "dd/M/yy" : DatePickerFormat;}/// <summary>////// </summary>/// <param name="firstRender"></param>/// <returns></returns>protected override async Task OnAfterRenderAsync(bool firstRender){if (firstRender){await RenderDatePicker();}if (!firstRender)await SetMinMaxDate();}#endregion#region Private Method/// <summary>/// Method to invoke Date picker js function/// </summary>/// <returns></returns>private async Task RenderDatePicker(){await JSRuntime.InvokeVoidAsync("siteFunction.InitDatePickerwithSelect", currentElement, DatePickerFormat, MinDate, MaxDate);}/// <summary>/// Method to invoke setminmaxdate js function/// </summary>/// <returns></returns>private async Task SetMinMaxDate(){await JSRuntime.InvokeVoidAsync("siteFunction.SetMinMaxDate", currentElement, MinDate, MaxDate);}/// <summary>/// Method to handle date picker change/// </summary>/// <param name="e">ChangeEventArgs</param>private void OnChange(ChangeEventArgs e){DateTime dateTime;if (DateTime.TryParse(e.Value.ToString(), out dateTime)){ValueChanged.InvokeAsync(dateTime);}}#endregion}
}

下面是每个变量和函数的描述:

组件属性

描述

Value

要传递的模型属性

Format

UI组件的UI格式

ValueChanged

在值更改时设置模型属性的事件回调。这有助于两种方式的绑定

Id

要设置的组件的id属性

Class

要设置的组件的类属性

Disabled

要设置的禁用属性,即如果为true其他启用则禁用

MinDate

要设置的属性以限制过去的日期。如果为null或未设置,则日历不会限制过去的日期

MaxDate

在限制未来日期的情况下要设置的属性。如果设置null或未设置,则日历不会限制未来日期

变量

描述

DatePickerFormat

要为jquery datepicker设置的格式。保持可配置,但可以更改为参数。

currentElement

传递DOM元素引用的变量

方法

描述

OnInitializedAsync

在组件初始化时执行的方法

OnAfterRenderAsync

每次渲染组件时执行的方法

RenderDatePicker

调用设置jquery的JavaScript  datepicker函数的方法

SetMinMaxDate

调用设置datepicker最小和最大日期的JavaScript函数的方法

OnChange

更改输入字段时调用的方法

如何使用?

下面是一组示例代码,展示了如何使用双向绑定来使用上述组件。

DatePicker.razor

下面是显示如何使用能够组件的示例代码。

@page "/datepicker"
<div class="container"><div class="col-12"><div class="row"><div class="form-group"><label for="txtStartDate">Start Date</label><JQDatePicker Id="txtStartDate" BindValue="@StartDate"MaxDate="@EndDate"Format="dd/MMM/yyyy"></JQDatePicker></div></div><div class="row"><p>Start Date : @StartDate</p></div></div>
</div>@code{private DateTime? StartDate{get;set;}private DateTime? EndDate{get;set;}
}

以下是显示如何使用Min Max日期函数的示例代码:

 <div class="form-group"><label for="txtStartDate">Start Date</label><JQDatePicker Id="txtStartDate" BindValue="@StartDate"MaxDate="@EndDate"Format="dd/MMM/yyyy"></JQDatePicker></div><div class="form-group"><label for="txtEndDate">End Date</label><JQDatePicker Id="txtEndDate" BindValue="@EndDate"MinDate="@StartDate"Format="dd/MMM/yyyy"></JQDatePicker></div><div class="row"><p>Start Date : @StartDate</p></div><div class="row"><p>End Date : @EndDate</p></div>
@code{private DateTime? StartDate{get;set;}private DateTime? EndDate{get;set;}
}

示例代码可在GitHub上获得。

https://www.codeproject.com/Tips/5290232/Blazor-datepicker-Component-using-JQuery

使用JQuery的Blazor日期选择器组件相关推荐

  1. js日期控件_11个开源的Github开源日期选择器组件,供你选择

    介绍 本文主要介绍几个Vue的时间日期选择器组件,目的在于让开发者们多一些选择,不管是从功能还是从样式,都可以选择一个适合的组件,这些组件没有绝对的好与不好,就看个人如何选择了,以下分别介绍十一个日期 ...

  2. JavaScript:日期选择器组件的使用

    前言: 在实际项目开发中,日期选择是一个十分常见而且重要的问题,在表单中设计到日期的验证时,如果让用户自己输入时间的话,那么使用正则进行验证其正确性是不可取的,因为他一般只能验证日期的格式,无法准确的 ...

  3. 自己动手写一个移动端日期选择器组件

    文章目录 背景 效果演示 思路 实现 1. picker-view 实现基础交互 2. 年月日动态配置以及支持最大最小日期 3. 支持不同日期模式 背景 本文写的组件是基于 uni-app 框架下的, ...

  4. axure日期选择器组件_vue干货分享,超过六种组件通信方法讲解和精髓归纳

    好消息:为了更好的规划和组织内容,今后每期内容之后能将预告下期的主题,欢迎大家补充 组件的分类 常规页面组件,由 vue-router 产生的每个页面,它本质上也是一个组件(.vue),主要承载当前页 ...

  5. axure日期选择器组件_Vue原理解析(十):搞懂事件API原理及在组件库中的妙用

    在vue内部初始化时会为每个组件实例挂载一个this._events私有的空对象属性: vm._events = Object.create(null) // 没有__proto__属性 这个里面存放 ...

  6. antd 日期时间选择_AntD日期选择器组件DatePicker默认展示当前时间前一个周四

    util中写个js方法 // 取当前时间的前一个周四 export const getThursday = () => { let now = new Date(); let nowTime = ...

  7. jQuery之日期选择器

    1:默认情况下,日期输入文本框获得页面焦点的时候,日期选择器组件会在一个覆盖层中打开日历选择面板,当日期输入文本框失去焦点或者选择 一个日期的时候,将自动关闭该日历选择面板 $(selector).d ...

  8. Angular中修改第三方组件的样式 - zorro日期选择器右端不对齐的BUG

    在一列上同时使用zorro的日期选择器和input组件会出现右端不对齐的BUG(nzSpan设置为一样) 上图中3个表单项:单据日期.开票.交货方式,nzSpan数值是一样的,可以看到日期选择器和下面 ...

  9. vue日期选择组件_一个Vue组件,为波斯开发人员提供日期选择器

    vue日期选择组件 Vue波斯日期选择器 (vue persian datepicker) This is a Jalali date picker component for Vue. 这是Vue的 ...

最新文章

  1. Python基础编程——字典
  2. 1.VMwareTools的安装,vmware启动的时候,虚拟机黑屏,解决办法
  3. Android实现侧滑抽屉菜单,android studio自带的抽屉侧滑菜单怎么设置点击事件?还头一回遇到,汗!...
  4. C++类的包含编译模型
  5. python tk combobox设置值为空_Python编程从入门到实践日记Day24
  6. linux应用之Lamp(apache+mysql+php)的源码安装(centos)
  7. phpexcel 日期 时分秒_PHPExcel对于Excel中日期和时间类型的处理
  8. android studio报错:ClassLoader referenced unknown path: /data/app/xxxx-1/lib/arm64
  9. matlab NORM函数
  10. 高德经纬度、百度经纬度、标准经纬度相互转换(VB.NET)
  11. 微信小程序获取位置信息基于腾讯地图实现
  12. https://ipcrs.pbccrc.org.cn/
  13. Android 音视频开发之基础篇 使用 SurfaceView绘制一张图片
  14. 沙漠 草原 湖泊 羊群 骆驼(1)
  15. 2021年金属非金属矿山(露天矿山)安全管理人员最新解析及金属非金属矿山(露天矿山)安全管理人员模拟考试
  16. docker安装过程 和部署2048小游戏
  17. session值为空,thymeleaf报错
  18. jconsole进行java死锁检测
  19. Debian/Ubuntu升级B-B-R教程
  20. Python基础:用while循环来判断一个数是否是完数

热门文章

  1. 缠论108课_缠论108课第54课:股票具体的走势—图解分析示范
  2. docker kali安装mysql_Linux环境使用Docker安装MySql
  3. 图标,专业设计师基本素材要件
  4. UI设计师经常去的提升欣赏水平的社区网站
  5. UI登陆页面素材|让设计师在竞争中脱颖而出
  6. 新手做UI?手里有几种常见的界面套路模板素材,你就成功一大半了!
  7. 品质LOGO模板素材|想知道平面设计师如何设计徽标的秘密吗?
  8. Python爬虫--51job爬取岗位信息并写入txt文件
  9. Intel异常的分类:错误,陷阱,终止
  10. libcap-ng库旨在使具有posix功能的编程比传统的libcap库容易得多