Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于模型列表的Razor复选框_C#_Asp.net Mvc_Razor_Checkbox - Fatal编程技术网

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)