[英]Blazor InputSelect binding value and updating another on select
在我的 InputSelect 中,我需要能够绑定一个值并在选项选择/单击时更新该值和另一个值。
我的 object 是什么样子的:
public class AccountModel
{
[Required(ErrorMessage = "Please enter an Office")]
public Office[] Office { get; set; }
}
public class Office
{
public string Id { get; set; }
public string Name { get; set; }
public Office()
{
}
public Office(string _id, string _name)
{
Id = _id;
Name = _name;
}
}
输入选择:
<p class="m-0 form-details-lbl">Office</p>
<InputSelect class="m-0 form-control edit-active"
@bind-Value="Account.Office[0].Id">
<option selected disabled>Select Office</option>
@foreach (Office office in OfficeLoc)
{
<option value=@office.Id @onselect="() => Account.Office[0].Name = office.Name">@office.Name</option>
}
</InputSelect>
<ValidationMessage For="() => Account.Office" />
因此office[0].Id
绑定到 InputSelect,但是在 office 列表中的选项 select 上,它将更新 id 和名称。
如果 Account.Office[0] 与您的数组项相同 model,我只需设置整个 object。
<option value=@office.Id @onselect="() => Account.Office = office">@office.Name</option>
如果它们不是同一个 model,我会使用一种方法:
<option value=@office.Id @onselect="() => SetOffice(office)">@office.Name</option>
@code {
void SetOffice(Office newOffice){
Account.Office[0].Id = newOffice.id;
Account.Office[0].Name = newOffice.Name;
}
}
注意我现在在工作,所以请原谅任何错别字或不准确之处。 您可能需要稍微调整一下,但希望这个想法足够清晰。
我留下了另一个答案,因为看看我错在哪里可能会有用。 当我检查时,我意识到<option>
标签上的事件不会触发,甚至包括 onclick。
尝试类似以下的操作。 您可能需要添加 using for System.Linq
。
<select name="offices" id="offices" @onchange="SelectOffice">
<option selected hidden>Select a room</option>
@foreach (var office in AvailableOffices)
{
<option value=@office.ID>@office.Name</option>
}
</select>
@code{
Office SelectedOffice {get;set;} // i.e. Account.Office[0]
List<Office> AvailableOffices {get; set;}
void SelectOffice(ChangeEventArgs e)
{
SelectedOffice = AvailableOffices.Where(ao => ao.ID.ToString() == e.Value.ToString()).First();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.