Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.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# ASP.NET MVC-使用MultiSelect删除多行_C#_Asp.net_Asp.net Mvc - Fatal编程技术网

C# ASP.NET MVC-使用MultiSelect删除多行

C# ASP.NET MVC-使用MultiSelect删除多行,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我想用MultiSelect删除多个数据行,但我不知道从哪里开始 我有一个详细信息页面,我有多个评论,由用户创建。到目前为止,我一次只能删除一个。如何同时添加MultiSelect和删除所有选定项 查看模型。 public System.Guid Id { get; set; } public System.Guid CreatorId { get; set; } [Required] public string Title { get; set; }

我想用MultiSelect删除多个数据行,但我不知道从哪里开始

我有一个详细信息页面,我有多个评论,由用户创建。到目前为止,我一次只能删除一个。如何同时添加MultiSelect和删除所有选定项

查看模型。

    public System.Guid Id { get; set; }

    public System.Guid CreatorId { get; set; }

    [Required]
    public string Title { get; set; }

    [Required]
    public string Description { get; set; }
查看-列出所有创建的评论

@model IEnumerable<xxxx.Review>

<h2>Reviews</h2>

<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Title)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Description)
        </th>
</tr>
 @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.Title)
            </td>
            <td style="width: 20%; height: 20%">
                <p>
                    @Html.DisplayFor(modelItem => item.Description)
                </p>
            </td>
            <td>                
                @Html.ActionLink("Delete", "Delete", new { id = item.Id })
            </td>
        </tr>
    }

</table>
删除操作(其中我使用via View)


我通过以下方式解决了这个问题:

为foreach循环内的每个数据行添加复选框:

<input type="checkbox" class="chkCheckBoxId" value=@item.Id name="chkReviewId"/>

我通过以下方式解决了这个问题:

为foreach循环内的每个数据行添加复选框:

<input type="checkbox" class="chkCheckBoxId" value=@item.Id name="chkReviewId"/>

如果生成的页面专门用于从集合中删除项目,则为每个项目生成一个复选框并发回整个集合

首先创建一个视图模型来表示要在视图中显示的内容

public class ReviewVM
{
    public Guid ID { get; set; }
    public string Title { get; set; }
    ... // other properties you want to display in the view
    public bool IsSelected { get; set; }
}
@model List<ReviewVM>
@Html.BeginForm())
{
    for (int i = 0; i < Model.Count; i++)
    {
        @Html.HiddenFor(m => m[i].ID)
        @Html.CheckBoxFor(m => m[i].IsSelected)
        @Html.DisplayFor(m => m[i].Title)
    }
    <input type="submit" .... />
}
在GET方法中

List<ReviewVM> model = db.Reviews.Where(m => m.CreatorId == id).Select(x => new ReviewVM
{
    ID = x.Id,
    Title = x.Title.
    ....
}).ToList();
return View(model);
List model=db.Reviews.Where(m=>m.CreatorId==id)。选择(x=>newreviewvm
{
ID=x.ID,
Title=x.Title。
....
}).ToList();
返回视图(模型);
在我看来

public class ReviewVM
{
    public Guid ID { get; set; }
    public string Title { get; set; }
    ... // other properties you want to display in the view
    public bool IsSelected { get; set; }
}
@model List<ReviewVM>
@Html.BeginForm())
{
    for (int i = 0; i < Model.Count; i++)
    {
        @Html.HiddenFor(m => m[i].ID)
        @Html.CheckBoxFor(m => m[i].IsSelected)
        @Html.DisplayFor(m => m[i].Title)
    }
    <input type="submit" .... />
}
@型号列表
@Html.BeginForm())
{
for(int i=0;im[i].ID)
@Html.CheckBoxFor(m=>m[i].IsSelected)
@DisplayFor(m=>m[i].Title)
}
}
以及POST方法

[HttpPost]
public ActionResult MyReviews(List<ReviewVM> model)
{
    foreach (var review in Model)
    {
        if (review.IsSelected)
        {
            .... // delete the review based in the review.ID value
[HttpPost]
公共行动结果MyReviews(列表模型)
{
foreach(模型中的var审查)
{
如果(选择审查)
{
..//删除基于review.ID值的审阅
请注意,
db.SaveChanges();
最后只需调用一次。由于用户已经删除了他们想要的所有评论,因此重定向到另一个视图似乎比返回到当前视图更合适


另一方面,如果视图还包含用于编辑现有评论或显示每个视图的更多详细信息的链接,则使用ajax删除项目更合适。对于典型的实现,请参阅。

如果生成的页面专门用于从集合中删除项目,则为每个项目生成一个复选框我把全部藏品寄回去

首先创建一个视图模型来表示要在视图中显示的内容

public class ReviewVM
{
    public Guid ID { get; set; }
    public string Title { get; set; }
    ... // other properties you want to display in the view
    public bool IsSelected { get; set; }
}
@model List<ReviewVM>
@Html.BeginForm())
{
    for (int i = 0; i < Model.Count; i++)
    {
        @Html.HiddenFor(m => m[i].ID)
        @Html.CheckBoxFor(m => m[i].IsSelected)
        @Html.DisplayFor(m => m[i].Title)
    }
    <input type="submit" .... />
}
在GET方法中

List<ReviewVM> model = db.Reviews.Where(m => m.CreatorId == id).Select(x => new ReviewVM
{
    ID = x.Id,
    Title = x.Title.
    ....
}).ToList();
return View(model);
List model=db.Reviews.Where(m=>m.CreatorId==id)。选择(x=>newreviewvm
{
ID=x.ID,
Title=x.Title。
....
}).ToList();
返回视图(模型);
在我看来

public class ReviewVM
{
    public Guid ID { get; set; }
    public string Title { get; set; }
    ... // other properties you want to display in the view
    public bool IsSelected { get; set; }
}
@model List<ReviewVM>
@Html.BeginForm())
{
    for (int i = 0; i < Model.Count; i++)
    {
        @Html.HiddenFor(m => m[i].ID)
        @Html.CheckBoxFor(m => m[i].IsSelected)
        @Html.DisplayFor(m => m[i].Title)
    }
    <input type="submit" .... />
}
@型号列表
@Html.BeginForm())
{
for(int i=0;im[i].ID)
@Html.CheckBoxFor(m=>m[i].IsSelected)
@DisplayFor(m=>m[i].Title)
}
}
以及POST方法

[HttpPost]
public ActionResult MyReviews(List<ReviewVM> model)
{
    foreach (var review in Model)
    {
        if (review.IsSelected)
        {
            .... // delete the review based in the review.ID value
[HttpPost]
公共行动结果MyReviews(列表模型)
{
foreach(模型中的var审查)
{
如果(选择审查)
{
..//删除基于review.ID值的审阅
请注意,
db.SaveChanges();
最后只需调用一次。由于用户已经删除了他们想要的所有评论,因此重定向到另一个视图似乎比返回到当前视图更合适


另一方面,如果视图还包含用于编辑现有评论或显示每个视图的更多详细信息的链接,则使用ajax删除项目将更合适。对于典型的实现,请参阅。

最简单的方法是使用关联的复选框生成每个项目,然后发回集合以删除所有项目选中的项。另一种替代方法是使用ajax发回要删除的项的ID(并在成功回调中从DOM中删除该项(您不太清楚
MultiSelectList
会有什么帮助)@StephenMuecke我必须选择第一个选项,因为我以前从未使用过Ajax。步骤如下:1.创建
复选框
内部
foreach
-循环
查看
查看。2.一次“删除”收集所有
ID
按钮被按下。3.使用例如
foreach
循环删除集合中的每个
id
?以前从未使用过
MultiSelect
,但我认为(通过假设它的声音)这是一种方法。最简单的方法是使用关联的复选框生成每个项,然后回发集合以删除所有选中的项。另一种方法是使用ajax回发要删除的项的ID(并在成功回调中从DOM中删除该项)(你认为
多选列表
会有什么帮助还不清楚)@StephenMuecke我必须选择第一个选项,因为我以前从未使用过Ajax。步骤如下:1.在
foreach
中创建
复选框
-循环
查看
-查看。2.一次“删除”收集所有
ID
按钮被按下。3.使用例如
foreach
循环删除集合中的每个
id
?以前从未使用过
MultiSelect
,但我认为(通过假设它的声音)这是一种方法。