0

以下のコードのようにコントローラーでチェックボックスを初期化しようとしていますが、ビューでは true か false かに関係なく選択されていません

コントローラー:

 foreach (var item in AssignedUsers)
 {
     if (dc.App_UserTasks.Any(u => u.UserId == item.UserId && u.TaskId == ProjectTask.Id))
        {
            Users.Single(u => u.Id == item.Id).IsChecked = true;
        }
     else
        {
             Users.Single(u => u.Id == item.Id).IsChecked = false;
        }
  }

見る:

 @for (int i = 0; i < Model.Responsibles.Count; i++)
    {
         @Html.CheckBoxFor(u => u.Responsibles[i].IsChecked)            
    }

モデルをコントローラーからビューに送信します。

 var EPT = new EditProjectTaskModel
            {
                ProjectId = ProjectTask.ProjectId,
                Title = ProjectTask.Title,
                ProjectName = ProjectTask.App_Project.ProjectName,
                Id = ProjectTask.Id,
                Description = ProjectTask.Description,
                EstimatedTime = ProjectTask.EstimatedTime,
                Status = ProjectTask.Status,
                Responsibles = Users.ToList()
            };
            return PartialView("_EditProjectTask", EPT);
4

1 に答える 1

1

ユーザーViewModelが次のようになっていると仮定します

public class UserViewModel 
{
  public string Name { set;get;}
  public int UserId { set;get;}
  public bool IsSelected { set;get;}
}

そして、メイン ビュー モデルにこの UserViewModel のコレクションがあります。

public class EditProjectTaskModel 
{
  public List<UserViewModel > Responsibles { set; get; }

  public EditProjectTaskModel()
  {
    if(this.Responsibles ==null)
       this.Responsibles =new List<UserViewModel >();
  }
}

Responsibles.cshtml以下の内容で呼び出されるエディター テンプレートを作成します。

@model YourNameSpace.UserViewModel 
@Html.CheckBoxFor(x => x.IsSelected)
@Html.LabelFor(x => x.IsSelected, Model.Name)
@Html.HiddenFor(x => x.UserId)

ループの代わりに、このようにメインビューに含めます

@model EditProjectTaskModel
@using (Html.BeginForm())
{
  //other elements
 @Html.EditorFor(m=>m.Responsibles)
 <input type="submit" value="Save" />
}

フォーム送信時に選択したチェックボックスを取得したい場合。

[HttpPost]
public ActionResult Save(EditProjectTaskModel model)
{
  List<int> userIDs=new List<int>();
   foreach (UserViewModel user in model.Responsibles)
   {
     if (user.IsSelected)
     {
       //you can get the selected user id's here
       userIDs.Add(user.UserId);    
     }
   } 
}
于 2012-05-21T19:00:50.167 に答える