我的编辑表单中有一些字段。因此,根据我的Transport下拉值选择,发货日期(Datetime)应该禁用其日历中的日期。
<div class="form-group col">
<label>Main Transport</label>
@if (lstTransports != null)
{
<InputSelect id="txtMainTransport" class="form-control" @bind-Value="@trade.transport" @onchange="OnMainTransportValueChange">
<option selected value="-1">-Select-</option>
@foreach (var transport in lstTransports)
{
<option value="@transport.id">@transport.id</option>
}
</InputSelect>
<ValidationMessage For="@(() => trade.transport)" />
}
</div>
<div class="form-group col">
<label>Estimated Shipping Date</label>
<InputDate id="shippingDate" @bind-Value="@trade.shippingDate" @bind-Value:format="dd/mm/yyyy" class="form-control" />
<ValidationMessage For="@(() => trade.shippingDate)" />
</div>
下面是onchange函数:
private async void OnMainTransportValueChange(ChangeEventArgs e)
{
trade.transport= e.Value.ToString();
if(trade.transport == "Sea")
{
//here it should have my date disable code
}
}
现在在基于传输值的onchange中,我想通过发货日期禁用日历日期。因此,如果Transport == Sea
,那么发货日期日历中的日期less than Datetime.Today.AddDays(5)
应该被禁用。
如何在c#中处理它?我试图通过发货日期id修改,但它似乎没有检测到id值。请帮助。
这对我有用
<InputDate @bind-Value="@myClass.shippingDate" @attributes="@shippingDateAttributes" />
…
@code {
Dictionary<string, object>? shippingDateAttributes = new();
private async void OnMainTransportValueChange(ChangeEventArgs e)
{
trade.transport= e.Value.ToString();
if(trade.transport == "Sea")
{
//here it should have my date disable code
string maxDate = (DateTime.Now + TimeSpan.FromDays(5)).ToString("yyyy-MM-dd");
shippingDateAttributes.Add("max", maxDate);
StateHasChanged();
}
}
}
您还需要一些逻辑来确保不会添加该属性两次。所以理想情况下,你应该先删除'max'属性,然后再添加它。
这是我在这篇文章中使用的参考:禁用日期时间选择器的日期