gpt4 book ai didi

c# - 更新同一类型的多个项目

转载 作者:太空宇宙 更新时间:2023-11-03 11:07:54 25 4
gpt4 key购买 nike

我正在使用 MVC 4,我想摆脱编辑页面,而只是在索引页面上同时对多个项目进行我想要的更改。

这是 CSHTML:

@model IEnumerable<HelpDesk.Models.ViewPerm>

@{
ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
@Html.ActionLink("Create New", "Create")
</p>

@using (Html.BeginForm())
{
@Html.ValidationSummary(true)

<fieldset>
<legend>ViewPerm</legend>
<table style="border: 5px solid white;">
<tr>
<th style="border: 5px solid white;">
@Html.DisplayNameFor(model => model.Roles.Role)
</th>
<th style="border: 5px solid white;">
@Html.DisplayNameFor(model => model.Views.Page)
</th>
<th style="border: 5px solid white;">
@Html.DisplayNameFor(model => model.Perm)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td style="border: 5px solid white;">
@Html.DisplayFor(modelItem => item.Roles.Role)
</td>
<td style="border: 5px solid white;">
@Html.DisplayFor(modelItem => item.Views.Folder)
@Html.DisplayFor(modelItem => item.Views.Page)
</td>
<td style="border: 5px solid white;">
@Html.EditorFor(modelItem => item.Perm)
</td>
<td>
@Html.ActionLink("Delete", "Delete", new { id = item.VPermID })
</td>
</tr>
}
</table>
<input type="submit" value="Save" />
</fieldset>
}


@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}

还有 C#:

    public ActionResult Index()
{
var viewperm = db.ViewPerm.Include(v => v.Roles).Include(v => v.Views);
return View(viewperm.ToList());
}

[HttpPost]
public ActionResult Index(ViewPerm viewperm)
{
if (ModelState.IsValid)
{
db.Entry(viewperm).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(viewperm);
}

当我点击保存按钮时,它显示“存储更新、插入或删除语句影响了意外的行数 (0)。自加载实体以来,实体可能已被修改或删除。刷新 ObjectStateManager 条目。”

感谢您的帮助。

最佳答案

第一个问题:您的 View 处理多个 ViewPerm,但您的发布操作只处理一个

更改您的发布方法以处理多个:

[HttpPost]
public ActionResult Index(IEnumerable<ViewPerm> viewperms)
{
if (ModelState.IsValid)
{
foreach (ViewPerm viewperm in viewperms)
{
db.Entry(viewperm).State = EntityState.Modified;
}

db.SaveChanges();
}

return View(viewperms);
}

您的第二个问题是您正在使用 foreach 在您的 View 中循环访问模型中的项目。这些字段需要正确索引,以便模型绑定(bind)器可以完成它的工作(它适用于数组)。将您的 View 更改为:

@for (int i = 0; i < Model.Count(); i++)
{
<tr>
<td style="border: 5px solid white;">
@Html.DisplayFor(m => m[i].Roles.Role)
</td>
<td style="border: 5px solid white;">
@Html.DisplayFor(m => m[i].Views.Folder)
@Html.DisplayFor(m => m[i].Views.Page)
</td>
<td style="border: 5px solid white;">
@Html.EditorFor(m => m[i].Perm)
</td>
<td>
@Html.ActionLink("Delete", "Delete", new { id = Model[i].VPermID })
</td>
</tr>
}

关于c# - 更新同一类型的多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15121515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com