mvc编辑返回值,但数据库不更新
本文关键字:数据库 更新 编辑 返回值 mvc | 更新日期: 2023-09-27 17:58:10
我有mvc项目来注册新学生,并为他提供课程和学位等,如项目的数据库(我使用实体框架)数据库所示.编辑视图代码为:
@model IList<HighStudy.Models.Grade>
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<div class="container">
<div class="row">
<div class="col-lg-12">
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title" align="center">Student Info</h3>
</div>
<div class="panel-body">
<div class="col-lg-4">
<p>Name: @Html.DisplayFor(model => model[0].Student.Name)</p>
<p>Level: @Html.DisplayFor(model => model[0].Student.Level)</p>
</div>
<div class="col-lg-4">
<p>Department: @Html.DisplayFor(model => model[0].Student.Department)</p>
<p>Study Type: @Html.DisplayFor(model => model[0].Student.StudyType)</p>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-lg-6">
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title" align="center">Course 1</h3>
</div>
<div class="panel-body">
<ul class="list-group">
@for (var i = 0; i < Model.Count; i++)
{
if (Model[i].CourseNumber == 1)
{
if (Model[i].Mark == "A" || Model[i].Mark == "B")
{
<li class="list-group-item list-group-item-success">
<div class="row">
<div class="col-lg-8">
@Model[i].Cours.Course_Title
@Html.TextBoxFor(model => Model[i].Cours.Course_Title, new { style = "width:50%" })
@Html.ValidationMessageFor(model => Model[i].Cours.Course_Title)
</div>
<div class="col-lg-2">
@Model[i].Grade1
@Html.TextBoxFor(model => Model[i].Grade1, new { style = "width:30px" })
@Html.ValidationMessageFor(model => Model[i].Grade1)
</div>
<div class="col-lg-2">
@Model[i].Mark
@Html.TextBoxFor(model => Model[i].Mark, new { style = "width:30px" })
@Html.ValidationMessageFor(model => Model[i].Mark)
</div>
</div>
</li>
}
else
{
<li class="list-group-item list-group-item-danger">
<div class="row">
<div class="row">
<div class="col-lg-8">
@Model[i].Cours.Course_Title
@Html.TextBoxFor(model => Model[i].Cours.Course_Title, new { style = "width:50%" })
@Html.ValidationMessageFor(model => Model[i].Cours.Course_Title)
</div>
<div class="col-lg-2">
@Model[i].Grade1
@Html.TextBoxFor(model => Model[i].Grade1, new { style = "width:30px" })
@Html.ValidationMessageFor(model => Model[i].Grade1)
</div>
<div class="col-lg-2">
@Model[i].Mark
@Html.TextBoxFor(model => Model[i].Mark, new { style = "width:30px" })
@Html.ValidationMessageFor(model => Model[i].Mark)
</div>
</div>
</div>
</li>
}
}
}
</ul>
</div>
</div>
</div>
<div class="col-lg-6">
<div class="panel panel-info">
<div class="panel-heading">
<h3 class="panel-title" align="center">Course 2</h3>
</div>
<div class="panel-body">
<ul class="list-group">
@for (var i = 0; i < Model.Count; i++)
{
if (Model[i].CourseNumber == 2)
{
if (Model[i].Mark == "A" || Model[i].Mark == "B")
{
<li class="list-group-item list-group-item-success">
<div class="row">
<div class="col-lg-8">
@Model[i].Cours.Course_Title
@Html.TextBoxFor(model => Model[i].Cours.Course_Title, new { style = "width:50%" })
@Html.ValidationMessageFor(model => Model[i].Cours.Course_Title)
</div>
<div class="col-lg-2">
@Model[i].Grade1
@Html.TextBoxFor(model => Model[i].Grade1, new { style = "width:30px" })
@Html.ValidationMessageFor(model => Model[i].Grade1)
</div>
<div class="col-lg-2">
@Model[i].Mark
@Html.TextBoxFor(model => Model[i].Mark, new { style = "width:30px" })
@Html.ValidationMessageFor(model => Model[i].Mark)
</div>
</div>
</li>
}
else
{
<li class="list-group-item list-group-item-danger">
<div class="row">
<div class="col-lg-8">
@Model[i].Cours.Course_Title
@Html.TextBoxFor(model => Model[i].Cours.Course_Title, new { style = "width:50%" })
@Html.ValidationMessageFor(model => Model[i].Cours.Course_Title)
</div>
<div class="col-lg-2">
@Model[i].Grade1
@Html.TextBoxFor(model => Model[i].Grade1, new { style = "width:30px" })
@Html.ValidationMessageFor(model => Model[i].Grade1)
</div>
<div class="col-lg-2">
@Model[i].Mark
@Html.TextBoxFor(model => Model[i].Mark, new { style = "width:30px" })
@Html.ValidationMessageFor(model => Model[i].Mark)
</div>
</div>
</li>
}
}
}
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-12">
<input type="submit" value="Save" class="btn btn-default" />
</div>
}
<div class="col-lg-offset-0">
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
并且在控制器中用于编辑视图的代码是:在控制器中编辑视图代码.到达db.Entry(g).State = System.Data.Entity.EntityState.Modified;
时
它去抓方块!!
任何帮助都是有用的,提前谢谢。
我认为您应该迭代您的集合,将每个对象添加到上下文中,并将其设置为Modified。
foreach(grade in g)
{
db.Entry(grade).State = EntityState.Modified;
}
db.SaveChanges();
您必须在foreach语句之外执行SaveChanges
db.Entry(g).State = System.Data.Entity.EntityState.Modified;
在上面的代码中,您从另一个对象获取g
,您需要从用于更改State
的同一个db
对象发起它
另一件事可能是list
,我认为List
的state
不能完全修改。
考虑做一些类似的事情
foreach (var item in g)
{
db.Set<Grade>().Attach(item);
db.Entry<Grade>(item).State = EntityState.Modified;
db.Configuration.ValidateOnSaveEnabled = false;
}
db.SaveChanges();
最近也经历了同样的错误,foreach救了我的命。不确定这是否是一种非常干净的方法。
已解决
我目前的例外是:
(无法更新EntitySet,因为它具有DefiningQuery,并且元素中不存在支持当前操作的元素
解决问题的步骤:
- 删除编辑视图中所有重复的@html.hiddenfor(model=>model.StudentID)
- 右键单击.edmx文件并选择用xml编辑器打开
- 搜索DefiningQuery并删除它,是的删除它
- 搜索(store:Schema="dbo")并将其重命名为(Schema="dbo")
这些步骤救了我的命,感谢所有朋友的帮助,我真的很感激你们的帮助