c# - MVC- 检索 EditorFor 的原始值
问题描述
在我网站的编辑页面上,我希望用户能够编辑数量,然后让它改变模型。这就是我使用“editorFor”的原因。问题是我仍然想在模型被编辑到控制器 post 方法之前返回它的值。
例如,如果用户将数量从 7 编辑到 10,我希望模型更改为 10,但我也希望视图将 7 返回给控制器。我怎样才能做到这一点?
这是我的编辑器代码
<div class="form-group">
@Html.LabelFor(model => model.item_qty, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.item_qty, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.item_qty, "", new { @class = "text-danger" })
</div>
</div>
这是我的编辑帖子方法
[RestrictAccess(restriction = AccessRestrictions.ModifyWorkOrder)]
[HttpPost]
[ValidateAntiForgeryToken]
[Audit]
public ActionResult Edit([Bind(Include = "ID,JobOrderID,StartDate,CompleteDate,jobSection,ItemID,item_qty,actual_item_qty,ComponentID,comp_qty,actual_comp_qty,PartID,part_qty,actual_part_qty,Notes,subDetail")] JODetails jODetails)
{
if (ModelState.IsValid)
{
JobOrder jo = db.JobOrders.Find(jODetails.JobOrderID);
db.Entry(jODetails).State = EntityState.Modified;
JODetails currentData = db.JODetails.Find(jODetails.ID);
Component comp = db.Components.Find(jODetails.ComponentID);
Item i = db.Items.Find(jODetails.ItemID);
int newItemCount = jODetails.item_qty != null ? (int)jODetails.item_qty : 0;
int oldItemCount = 0;
int itemDiff = newItemCount - oldItemCount;
}
解决方案
如果我理解得足够好,您就不需要从视图中返回值。当model
传递给控制器时,数据库中的值没有改变,您可以再次读取它。像这样的东西:
// First. Grab the previous quantity...
// This approach won't work because of EF is already TRACKING the entity
// JODetails currentData = db.JODetails.Find(jODetails.ID);
// So, you have to access data like this...
var currentData = db.JODetails.AsNoTracking().FirstOrDefault(j => j.ID == jODetails.ID);
int previousQuantity = currentData?.item_qty;
//... do whatever with previousQuantity prop & new JODetails model. Don't forget to check if currentData is null
// Just NOW. Mutate the object via EF...
db.Entry(jODetails).State = EntityState.Modified;
// THEN. Commit changes...
db.SaveChanges();
直到你SaveChanges()
数据库中的记录才真正改变。阅读一些关于 EF 如何跟踪、修改和保存对象的文档。
这可能对理解这一点非常有帮助......
当然,如果您需要从视图中检索 Quantity 数据(不明白为什么),还有一些替代方法,例如 aViewModel
但我认为这可以解决问题。是的,使用这种方法可以再访问一次数据库,但很少。
推荐阅读
- python - Django过滤数据与国家分配给用户
- firebase - 如何在使用 Typescript 保存时自动更新本地模拟器上的 Firebase 云函数中的代码
- python - 如何安装用于 rinohtype/sphinx 的系统 (Windows 10) 字体?
- reactjs - 优化从同一目录导入少量文件的代码
- authentication - 如何配置 Tomcat 领域超时
- visual-studio-code - 我如何必须设置更漂亮才能为我的所有项目工作,但要为我不单独工作的特定项目进行自定义设置?
- python - 如何仅在 numpy 数组的“一维”上应用 K-means++ 并按原样保留另一维
- python - 基于 Keras LSTM 的神经网络不学习
- elixir - 如何在 Elixir 中展平嵌套列表?
- android - 如何在android的表格布局中删除选定的行