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;

它去抓方块!!

任何帮助都是有用的,提前谢谢。

mvc编辑返回值,但数据库不更新

我认为您应该迭代您的集合,将每个对象添加到上下文中,并将其设置为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,我认为Liststate不能完全修改。

考虑做一些类似的事情

        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")
    这些步骤救了我的命,感谢所有朋友的帮助,我真的很感激你们的帮助