C# 用于模型列表的Razor复选框
用户模型C# 用于模型列表的Razor复选框,c#,asp.net-mvc,razor,checkbox,C#,Asp.net Mvc,Razor,Checkbox,用户模型 public class UserModel { public int UserId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Location { get; set; } public IEnumerable<UserPets> UserPets { get; set;
public class UserModel
{
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Location { get; set; }
public IEnumerable<UserPets> UserPets { get; set; }
}
public class UserPetsModel
{
public PetModel Pet{ get; set; }
public bool UserHasPet { get; set; }
}
使用这两个模型,我创建了一个编辑页面,用户可以进来编辑他们的宠物
为了让他们说出他们养了哪些宠物,我尝试使用复选框
编辑页面
@model Models.UserModel
@using (Html.BeginForm())
{
<div class="form-group">
@Html.LabelFor(model => model.FirstName)
@Model.FirstName
</div>
@foreach (var userPets in Model.UserPets)
{
@Model.Pet.AnimalName
<div>
@Html.CheckBoxFor(u => userPets .UserHasPet)
</div>
}
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
}
@model Models.UserModel
@使用(Html.BeginForm())
{
@LabelFor(model=>model.FirstName)
@Model.FirstName
@foreach(Model.userPets中的var userPets)
{
@Model.Pet.AnimalName
@CheckBoxFor(u=>userPets.UserHasPet)
}
}
我遇到的问题是,尝试将UserModel
映射回控制器操作时。当我按下保存按钮时,UserModel
上的所有内容都被映射回控制器,除了UserPetsModels
之外,我认为这是由于使用了foreach
是否有另一种方法可以显示每个
UserPetModel
的复选框,而无需使用foreach或for循环。是的。您应该为用户PetsModel
创建。它看起来像:
@model UserPetsModel
@Model.Pet.AnimalName
<div>
@Html.CheckBoxFor(model => model.UserHasPet)
</div>
<div class="row">
@Html.EditorFor(m => m.UserPets)
</div>
EditorFor
将为您创建正确的绑定。请注意,您应该仅为UserPets
创建EditorTemplate,并且它还可以使用与我显示的相同语法用于List
和IEnumarable
。我建议用EditorTemplate替换循环。那么你的
@foreach (var userPets in Model.UserPets)
{
@Model.Pet.AnimalName
<div>
@Html.CheckBoxFor(u => userPets.UserHasPet)
</div>
}
将其更改为for循环,因为模型绑定器需要为列表编制索引
<div class="row">
@Html.EditorFor(m => m.UserPets)
</div>
@model UserPetsModel
@Html.HiddenFor(x => x.Pet.PetId)
@Html.LabelFor(x => x.UserHasPet, Model.Pet.AnimalName)
@Html.CheckBoxFor(x => x.UserHasPet)