gpt4 book ai didi

asp.net - 使用新添加的数据库 ID 填充 View 模型

转载 作者:行者123 更新时间:2023-12-02 12:26:32 28 4
gpt4 key购买 nike

这是昨天提出的问题的后续。

我有一个 View 模型,它显示目标列表。使用 jquery,我可以在屏幕上添加一个新的目标行(对于列出的任何新目标,ID 设置为 0)。当我单击“保存”按钮将目标列表发布回 Controller 时, Controller 会循环遍历目标列表,并根据数据库检查 ID。如果未找到 ID,它将创建一个新目标,将其添加到数据库上下文中,并保存更改。然后它检索 ID,并将 View(model) 返回给 View。

问题是,虽然模型中的 ID 已更新为数据库 ID - 当模型再次在 View 中渲染时,它的 ID 仍然是 0。因此,如果我再次单击“保存”,它会再次重新添加再次将“之前添加的新目标”添加到数据库中。

我的 Controller 如下所示:

    //
// POST: /Objective/Edit/model
[HttpPost]
public ActionResult Edit(ObjectivesEdit model)
{
if (model.Objectives != null)
{
foreach (var item in model.Objectives)
{
// find the database row
Objective objective = db.objectives.Find(item.ID);
if (objective != null) // if database row is found...
{
objective.objective = item.objective;
objective.score = item.score;
objective.possscore = item.possscore;
objective.comments = item.comments;
db.SaveChanges();
}
else // database row not found, so create a new objective
{
Objective obj = new Objective();
obj.comments=item.comments;
obj.objective = item.objective;
obj.possscore = item.possscore;
obj.score = item.score;
db.objectives.Add(obj);
db.SaveChanges();
// now get the newly created ID
item.ID = obj.ID;
}
}
}
return View(model);
}

我的 ID 正在 Controller 中设置:

enter image description here

编辑:这里是另一个例子,显示 model.Objectives 1 .ID正在更新:

enter image description here

但是当 View 渲染它时,它会恢复为 0:

enter image description here

目标列表确定如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MvcObjectives2.Models
{
public class ObjectivesEdit
{
public IEnumerable<Objective> Objectives { set; get; }
public ObjectivesEdit()
{
if (Objectives == null)
Objectives = new List<Objective>();
}
}
}

View 有:

@model MvcObjectives2.Models.ObjectivesEdit

@using (Html.BeginForm())
{
@Html.EditorFor(x=>x.Objectives)
<button type="submit" class="btn btn-primary"><i class="icon-ok icon-white"></i> Save</button>
}

在我的 EditorTemplate (objective.cshtml) 中:

@model  MvcObjectives2.Models.Objective          

<div class="objec">
<div>
@Html.TextBoxFor(x => x.objective})
</div>
<div>
@Html.TextBoxFor(x => x.score})
</div>
<div>
@Html.TextBoxFor(x => x.possscore})
</div>
<div>
@Html.TextBoxFor(x => x.comments})

@Html.HiddenFor(x => x.ID) // This is the ID where it should now show the new ID from the database, but shows 0

</div>
</div>

我怀疑问题出在我的 Controller 中的某个地方 - 但我很感激任何有关如何让我的 View 呈现所添加目标的新 ID 的建议。

最佳答案

在重新措辞我的搜索后,我发现了几篇文章说这是设计使然。如果再次显示相同的页面,发布的表单期望显示它发送到 Controller 的内容。

但是,您可以添加此内容,这将刷新 ModelState,并明显显示模型中的更新值,并在 Controller 中更新:

        ModelState.Clear();
return View(model);

我不确定这是否还有其他效果 - 但目前看来效果不错。

谢谢,马克

关于asp.net - 使用新添加的数据库 ID 填充 View 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11576490/

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