我有一个基于 ASP.NET Core/.net 5 的项目。我想创建某种可重用的视图/组件来创建日期时间范围选择器。所以任何时候我想创建日期时间范围都可以调用视图/组件,它会相应地渲染视图。
我最初的想法是想为以下模型创建一个编辑器模板
public class DateTimeRange
{
public DateTime? From { get; set; }
public DateTime? To { get; set; }
}
然后任何时候我想渲染一个日期时间范围,然后我会做这样的事情
public class MainViewModel
{
public DateTimeRange Range { get; set; }
}
在Main.cshtml
视图中我会做这样的事情
@model MainViewModel
@Html.EditorFor(x => x.Range)
但是在上面的用例中,没有办法告诉编辑器是否需要范围。
所以我考虑使用剃须刀组件,因为组件允许我将参数传递给视图
该DateTime.razor
组件看起来像这样
@if (IsRequired)
{
<div class="col p-1">
<label class="sr-only" asp-for=""></label>
<input type="text" class="form-control" asp-for="" required>
</div>
<div class="col p-1">
<label class="sr-only" asp-for=""></label>
<input type="text" class="form-control" asp-for="" required>
</div>
}
else
{
<div class="col p-1">
<label class="sr-only" asp-for=""></label>
<input type="text" class="form-control" asp-for="">
</div>
<div class="col p-1">
<label class="sr-only" asp-for=""></label>
<input type="text" class="form-control" asp-for="">
</div>
}
@code {
public bool IsRequired { get; set; }
}
然后在我的主要观点中,我会做这样的事情
@model MainViewModel
<component type="typeof(DateTime)" param-IsRequired="true" param-Model="Model.Range" />
但是,我将如何使用helper 或任何其他方法从组件内部呈现和Propertiesasp-for
的输入,同时又不会失去 HTML 前缀的完整性?From
To