问题标签 [updatemodel]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
4332 浏览

asp.net-mvc - ASP.NET MVC 中 UpdateModel 的正确行为是什么?

我很想知道你们觉得就UpdateModelASP.NET MVC 中的方法而言应该被视为“正确的行为”。

我在这里问的原因可能是,如果这个功能是“设计的”,有人可以澄清为什么它是这样的,也许是一种不同的调用方式来实现所需的功能,我想这就是 90 的方式% 的人希望这能奏效吗?

本质上,我的抱怨在于UpdateModel.

假设您希望通过简单的Save操作方法更新表单,表单上的数据字段反映了数据库中的模型,最初为了保存请求,我们可能会从数据库中获取现有模型,然后更新相关字段哪些已更改,通过发送FormCollection然后更新UpdateModel到我们现有的模型。此功能,但似乎此 DB 填充对象上的任何现有属性正在“重置”;我的意思是,被设置为 null 或初始化默认值,就像它是一个全新的对象一样,除了那些与FormCollection.

这是一个问题,因为对象上存在但不一定存在于表单上的任何现有属性,例如任何子集合或对象、日期或任何非面向 UI 的字段都是空的,给您留下一半填充、更多或由于所有丢失的数据(包括可能现在设置为 0 的 ID 堆栈)而无法保存到数据库的不可用对象。

我认为这是不可取的行为,UpdateModel应该只更新在FormCollection. 这意味着您现有的所有属性都将保持不变,但您的更新将被设置。然而,从目前的推论来看,显然情况并非如此——它似乎实例化了一个全新的对象副本,更新表单的属性,然后返回新对象。

最后,从这个负担的角度来看,保存半复杂表单并保留所有现有对象数据的唯一方法是手动将每个属性与相应的表单属性结合到绝对保证仅更新表单中存在的属性。

我猜,

  1. 那些同意这是设计使然的人,我的形式结合是最好的方式吗?
  2. 或者,你是如何解决这个问题的?

请随时提供您对这些人的想法,谢谢。

这是另一个遭受此问题困扰的人的例子:
Calling UpdateModel with a collection of complex data types reset all non-bound values?

0 投票
1 回答
819 浏览

asp.net-mvc - MVC - UpdateModel 和 DropDownLists

我正在做 MVC 并在下拉列表中查找值。当调用 UpdateModel 时,只有在查找更新之前的值,之后什么都没有。我没有得到任何错误。

我可以在我的控制器中编辑、创建和使用以下代码:

在我看来,我有以下几点:

这似乎可以绑定,并允许我在编辑下拉列表时获取选定的值并创建作品。

这是我第一次做 MVC,所以非常感谢任何帮助。

0 投票
4 回答
2940 浏览

asp.net-mvc - Asp.net MVC UpdateModel(myClass) 的基本问题

在我的控制器中的 Asp.net MVC 1 应用程序中,我想使用 UpdateModel 在控制器中使用 POST 数据填充变量。我看过几十个例子,但即使是最基本的例子对我来说似乎也无声无息地失败了。

这是一个非常基本的示例,它不起作用。我究竟做错了什么?

0 投票
2 回答
542 浏览

c# - 使用服务层进行验证,如何更新实体

我在我的应用程序中实现了一个服务层,例如: http ://www.asp.net/learn/mvc/tutorial-38-cs.aspx

(我使用 Linq2SQL)。现在我在实施 Edit ActionResult 时遇到了麻烦。在 Create (Post) ActionResult 我采用服务方法:

没关系。现在我在 Edit ActionResult 中的问题是:如何实现实体的更新?

在存储库中,我有以下更新方法:

然后服务调用存储库。但是在表单中所做的更改不会“发送”到模型,因此实体不会被新值更新。

我可以在 Controller 中调用“UpdateModel”,但是我还必须在 Service 中调用 Validate。但是验证逻辑不再在服务中而不是在控制器中。

我希望你能理解我的问题。

0 投票
2 回答
4232 浏览

asp.net-mvc - ASP.NET MVC Updatemodel 不更新但不抛出错误

任何想法为什么这不会更新但不会引发错误?

0 投票
2 回答
2301 浏览

asp.net-mvc - 如何让 ASP.NET MVC 的 UpdateModel 忽略主键列?

我有一个带有 GUID 主键的表,我正在尝试使用 ASP.NET MVC 控制器的UpdateModel方法(db 是 LINQ-to-SQL 数据上下文)插入一个新创建的对象:

首先,模型上自动生成的 Edit 和 Create 视图包含一个供用户编辑的主键字段似乎很奇怪,但删除它们很容易。

但是我遇到了一个问题,UpdateModel当主键没有作为表单集合的一部分传入时,调用会引发异常。

我是否错过了将主键列标记为用户(以及对 的调用UpdateModel)不应该使用的东西的某种方式?我可以添加一个includeProperties数组并保留主键的名称,但这不是很干)。

我还可以在包含主键的表单中添加一个隐藏字段——使用 GUID 主键,我可以在创建的 GET 请求中执行此操作。

0 投票
3 回答
1961 浏览

asp.net-mvc - 将反射创建的对象与默认模型绑定器一起使用的 ASP.NET MVC 问题

我在 ASP.NET MVC 中遇到了一个奇怪的问题,当传递一个formCollection时,对象没有被UpdateModel更新。当通过反射创建要更新的对象时, UpdateModel似乎无法正常工作。

场景:我有一个应用程序,它有大约 50 个查找表——每个查找表都包含完全相同的模式,包括 id、title、description、isactive 和 createdon 等典型字段。我不想构建 50 个视图,而是想要一个可以显示所有查找表中的数据的视图。我创建了一个名为 IReferenceEntity 的接口,并在代表我的查找表的每个 POCO 中实现了它。

使用此界面,我可以轻松地使用查找表中的记录填充视图。(我通过以下方式将项目传递给视图。)

从数据库到视图,每件事都完美无缺。

但是,当我尝试在帖子上更新模型时,我遇到了一些问题。

如果我像下面这样显式声明一个对象引用,那么每件事都会完美运行,并且我的对象的值会使用我的表单中的值进行更新。因此,我可以更新数据库。

不幸的是,硬编码对象类型将完全破坏使用接口的原因。

(应用程序的主要目标是能够动态添加新表,例如查找表,而无需执行任何“特殊”操作。这是通过反映加载的程序集并定位实现特定接口或基类的任何类来实现的)

我的策略是在回发时确定对象的具体类型,然后通过反射创建该类型的实例。(我用来确定类型的机制有些原始。我将它作为隐藏字段包含在表单中。欢迎更好的想法。)

当我通过以下任何方法使用反射创建对象的实例时,UpdateModel 都不会更新任何对象。

注意:我已经验证通过重新选择创建的对象都是正确的类型。

有谁知道为什么会发生这种情况?我有点难过。

如果我真的很“努力”,我可以创建工厂对象,它可以实例化这些引用实体/查找对象中的任何一个。但是,这会破坏应用程序允许透明地添加和发现新查找表的能力,而且不够干净。

此外,我可以尝试从实际的 ReferenceEntity 基类而不是接口派生,但我怀疑这是否会产生任何影响。问题似乎与在模型绑定器中使用反射创建的对象有关。

任何帮助表示赞赏。

安东尼

0 投票
5 回答
2026 浏览

asp.net-mvc - ASP.NET MVC UpdateModel 易受黑客攻击?

我有一个类似于日历的 ASP.NET MVC 应用程序。根据 NerdDinner 示例,我正在使用 UpdateMethod() 更新编辑页面的结果

在我的应用程序中,某些事件是完全可定制的,而某些事件只是部分可定制的。尽管用于编辑部分可自定义事件的编辑表单只有这些字段可用,但显然有人可以使用丢失的数据创建自己的表单并发布到我的网站。如果他们这样做,是什么阻止某人更改任何/所有字段?更糟糕的是,如果他们试图更改 id(主键)怎么办?

感觉 UpdateModel() 很容易受到非常基本的黑客攻击。我的恐惧是合理的还是我错过了什么?

0 投票
1 回答
321 浏览

linq-to-entities - 从 Linq-to-Entities 中的 EDMX 文件中删除表后,如何取回表?

我的 Linq2Entities 模型有问题 - 我可能在这里遗漏了一些明显的东西。

这是我所做的:

  • 添加了 EDMX 模型文件
  • 将 TableX 添加到模型中
  • 回到 SQL Management Studio 并更新 TableX,更改其主键
  • 返回我的 EDMX 文件并单击“从数据库更新模型”
  • TableX 更新但不正确,未重新分配新的主键
  • 然后我从我的模型中删除了 TableX
  • 点击“从数据库更新模型”
  • TableX 现在位于“添加”选项卡中,但仍位于“刷新”选项卡中
  • 我单击“刷新”选项卡,然后单击“完成”
  • TableX 不再出现

如果我在具有不同数据库和(显然)不同表的新项目中重复此过程,它仍然会发生。

为什么我不能让我的桌子回到模型中?!

0 投票
1 回答
1730 浏览

asp.net-mvc - MVC Updatemodel 未从 DropDownList 更新

我的编辑屏幕上有以下内容:

在我的控制器中:

当我编辑记录并更改文本字段时,一切正常,但是当我更改连接到下拉列表的项目时,更改不会在活动对象中更新。我查this.ValueProvider["Campaign.CandidateID"]过了,数据在里面!

顺便说一下,在显示编辑屏幕期间,它正在选择列表中选择正确的候选者。

问题是否来自于 ValueProvider 提供了一个字符串而我的类中的 CandidateID 是一个 int 的事实?

我难住了。