C# 在处理列表时,如何在foreach内部使用复选框?

C# 在处理列表时,如何在foreach内部使用复选框?,c#,asp.net-mvc,list,checkbox,foreach,C#,Asp.net Mvc,List,Checkbox,Foreach,我正在练习这个项目,我需要向用户显示一个客户列表和每个客户的复选框,这样他可以选择一些,然后单击一个按钮 我成功地列出了这个列表,我可以看到列表中每一行都有一个复选框 问题是: 我不知道如何使每个复选框与列表中的每个项目相关。。。目前,它们就像整个列表的单个复选框一样工作 我对C#很陌生,也许我只是在做些傻事,所以你能帮我一下吗 另外,我如何迭代列表以检查选择了哪些 这是我的密码: 我的viewModel: public class TransferViewModel { publi

我正在练习这个项目,我需要向用户显示一个客户列表和每个客户的复选框,这样他可以选择一些,然后单击一个按钮

我成功地列出了这个列表,我可以看到列表中每一行都有一个复选框

问题是:

我不知道如何使每个复选框与列表中的每个项目相关。。。目前,它们就像整个列表的单个复选框一样工作

我对C#很陌生,也许我只是在做些傻事,所以你能帮我一下吗

另外,我如何迭代列表以检查选择了哪些

这是我的密码:

我的viewModel:

 public class TransferViewModel
{
    public TransferViewModel() 
    {
        Clients = new List<Client>();
    }

    public virtual ICollection<Client> Clients { get; set; }

    [DisplayName("ID")]
    public int? Id { get; set; }

    [DisplayName("Transferir de")]
    public string TransferFrom { get; set; }

    [DisplayName("Transferir para")]
    public string TransferTo { get; set; }

    [DisplayName("Selecionado")]
    public bool IsSelected { get; set; }

    [DisplayName("Categoria do Cliente")]
    public virtual ClientCategory Category { get; set; }

    [DisplayName("Categoria do Cliente")]
    public int? CategoryId { get; set; }

    [DisplayName("Razão Social")]
    public string OfficialName { get; set; }

    [DisplayName("Nome Fantasia")]
    public string DisplayName { get; set; }

    [DisplayName("Responsável")]
    public string AssignedToLogin { get; set; }

    [DisplayName("Excluído")]
    public bool IsDeleted { get; set; }

    [DisplayName("Ultima atividade")]
    public DateTime? LastInteractionOn { get; set; }

}
公共类TransferViewModel
{
公共TransferViewModel()
{
Clients=新列表();
}
公共虚拟ICollection客户端{get;set;}
[显示名称(“ID”)]
公共int?Id{get;set;}
[显示名称(“传输数据”)]
从{get;set;}传输的公共字符串
[显示名称(“转让条款”)]
公共字符串传输到{get;set;}
[显示名称(“Selecionado”)]
公共布尔值被选为{get;set;}
[显示名称(“客户分类”)]
公共虚拟客户端类别{get;set;}
[显示名称(“客户分类”)]
公共int?CategoryId{get;set;}
[DisplayName(“Razão Social”)]
公共字符串OfficialName{get;set;}
[DisplayName(“Nome Fantasia”)]
公共字符串DisplayName{get;set;}
[显示名称(“响应级别”)]
公共字符串AssignedToLogin{get;set;}
[DisplayName(“Excluído”)]
公共布尔被删除{get;set;}
[显示名称(“最终激活”)]
公共日期时间?LastInteractionOn{get;set;}
}
我的控制器:

           [ViewBagListOfUsers]
    // GET: ActivityTypes/Create
    public ActionResult TransferSpecificClients(TransferViewModel model)
    {
        var selectedUserFrom = model.TransferFrom;
        var selectedUserTo = model.TransferTo;
        var query = db.Clients as IQueryable<Client>;

        if (selectedUserFrom!=null)
        {
            model.Clients = query
            .Where(p => p.AssignedToLogin == selectedUserFrom)
            .ToArray();

        }


        if ((selectedUserTo != null)&&(selectedUserFrom != null))
        {

                 //do something if the client is selected ...

        }
        return View( model);
[ViewBagListOfUsers]
//获取:ActivityTypes/Create
公共操作结果TransferSpecificClient(TransferViewModel模型)
{
var selectedUserFrom=model.TransferFrom;
var selectedUserTo=model.TransferTo;
var query=db.Clients作为IQueryable;
if(selectedUserFrom!=null)
{
model.Clients=query
.Where(p=>p.AssignedToLogin==selectedUserFrom)
.ToArray();
}
if((selectedUserTo!=null)和&(selectedUserFrom!=null))
{
//如果选择了客户端,请执行某些操作。。。
}
返回视图(模型);
我的看法是:

@model EFGEREN.App.Models.ViewModels.Clients.TransferViewModel
@using EFGEREN.App.Models.Entities
@using System.Linq
@using System.Web.Mvc
@using Resources

@{
    ViewBag.Title = "TransferSpecificClients";
    IEnumerable<SelectListItem> usersListFrom = ViewBag.UserList;
    IEnumerable<SelectListItem> usersListTo = ViewBag.UserList;

}

<h2>TransferSpecificClients</h2>



@using (Html.BeginForm())
{
    @Html.DisplayNameFor(model => model.TransferFrom)
    @Html.DropDownListFor(m => m.TransferFrom, usersListFrom, Expressions.DropDownListSelectOneX, new { @class = "form-control" })


<div class="controls well well-sm">
    <button type="submit" value="Filtrar" class="btn btn-success"><i class="glyphicon glyphicon-ok"></i>@("Filtrar")</button>
</div>


<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.IsSelected)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.CategoryId)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.OfficialName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.DisplayName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.AssignedToLogin)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.LastInteractionOn)
        </th>
        <th></th>
    </tr>



@foreach (var item in Model.Clients) {
    <tr>

        <td>
            @Html.CheckBoxFor(m => m.IsSelected, new { @checked = "checked" })
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.CategoryId)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.OfficialName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.DisplayName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.AssignedToLogin)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.LastInteractionOn)
        </td>

    </tr>}


</table>

@Html.DisplayNameFor(model => model.TransferTo)
@Html.DropDownListFor(m => m.TransferTo, usersListTo, Expressions.DropDownListSelectOneX, new { @class = "form-control" })
<div class="controls well well-sm">
    <button type="submit" value="Transferir" class="btn btn-success"><i class="glyphicon glyphicon-ok"></i>@("Transferir")</button>
</div>
}
@model EFGEREN.App.Models.ViewModels.Clients.TransferViewModel
@使用EFGEREN.App.Models.Entities
@使用System.Linq
@使用System.Web.Mvc
@利用资源
@{
ViewBag.Title=“TransferSpecificClient”;
IEnumerable usersListFrom=ViewBag.UserList;
IEnumerable usersListTo=ViewBag.UserList;
}
转让特定客户
@使用(Html.BeginForm())
{
@DisplayNameFor(model=>model.TransferFrom)
@DropDownListFor(m=>m.TransferFrom,usersListFrom,Expressions.DropDownListSelectOneX,new{@class=“form control”})
@(“过滤器”)
@DisplayNameFor(model=>model.IsSelected)
@DisplayNameFor(model=>model.CategoryId)
@DisplayNameFor(model=>model.OfficialName)
@Html.DisplayNameFor(model=>model.DisplayName)
@DisplayNameFor(model=>model.AssignedToLogin)
@DisplayNameFor(model=>model.LastInteractionOn)
@foreach(Model.Clients中的var项){
@CheckBoxFor(m=>m.IsSelected,new{@checked=“checked”})
@DisplayFor(modelItem=>item.CategoryId)
@DisplayFor(modelItem=>item.OfficialName)
@DisplayFor(modelItem=>item.DisplayName)
@DisplayFor(modelItem=>item.AssignedToLogin)
@DisplayFor(modelItem=>item.LastInteractionOn)
}
@DisplayNameFor(model=>model.TransferTo)
@DropDownListFor(m=>m.TransferTo,usersListTo,Expressions.DropDownListSelectOneX,new{@class=“form control”})
@(“转让”)
}

SF中有一些关于如何绑定集合的内容,但基本上您应该在视图中使用如下结构:

@foreach (var item in Model.Clients) {

// Create a value to be used as index of your elements
var guid = @Guid.NewGuid().ToString();

// Define the prefix of each element from this point
ViewData.TemplateInfo.HtmlFieldPrefix = "Clientes[" + guid + "]";

    <tr>
        <td>
            <input type='hidden' name='Clientes.Index' value='@guid'>
            @Html.CheckBoxFor(m => m.IsSelected, new { @checked = "checked" })
        </td>
     </tr>
}

希望有帮助。

您不能使用
foreach
循环(请参阅dupe)。请删除您的`new{@checked=“checked”}`代码。
CheckBoxFor()
method根据属性的值确定其选择。谢谢Rodrigo。您的回答对我帮助很大。问题是我弄乱了我的viewmodel,并对整个客户端列表使用了一个bool属性。我刚刚更正了我的模型(将其制作为:bool+客户端列表)现在它工作了。在Razor视图中的foreach中,
m=>m.
lambda似乎只绑定到模型,而不是在Razor视图中的foreach中的循环中的项目,
m=>m.
lambda似乎只绑定到模型,而不是循环中的项目。我的问题正是Douglas的。如何将它绑定到Razor视图中的项目环
var clientes = model.Clientes.Select(x => x.IsSelected == true).ToList();