- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我偶然发现了 ASP.Net MVC 的一个非常奇怪的情况,传递一个“id”作为操作参数和一个“id”隐藏表单元素。我有一个带有“id”参数的 Action 。这个 id 值代表一个项目。我有一个 Controller 操作,我正在创建一个数据输入表单,用于将员工分配给传入的项目(我创建一个下拉列表,管理员在其中选择要分配给通过的项目的员工)。通过将员工分配给项目,我创建了一个 ProjectEmployee 记录(项目 id、员工 id 和一个表示组合的 id,它是数据库中的一个身份列)。身份列(名为“id”)也是一个隐藏的表单元素。这是必要的,因为我需要能够在以后编辑项目/员工分配。
无论如何,在为项目创建新员工分配时,项目 ID(即传递给操作的“id”)将应用于“id”隐藏表单元素。
我将 117 传递给行动。 117 是项目 ID。它被设置为应为 0 的“id”隐藏字段,因为 0 表示新项目/员工分配。
查看模型
id - unique id that represents the Project/Employee combination
projectId - the "Id" being passed to action
EmployeeId - what the admin is selecting from drop down
rate
startdate
endDate
...
数据输入表
@Html.HiddenFor(m => m.Id)
@Html.HiddenFor(m => m.ProjectId)
...
Id: @Model.Id <br />
ProjectId: @Model.ProjectId<br />
所以,@Html.HiddenFor(m => m.Id) 会渲染一个隐藏的表单元素,其值为 117。@Model.Id 会向 UI 渲染 0。单步执行代码,我可以直观地看到 Id 属性的值是 0。HiddenFor 是如何让它的电线交叉并拉出 117 的值?
这个错误已经进入生产阶段,所以我手上的数据变得一团糟,因为我没有在数据库表中创建新记录,而是在更新现有记录,因为“Id”属性是错误地从 0(表示新记录)设置为 117(即 projectId),因此正在更新不同的记录。
最佳答案
How come HiddenFor is getting it's wires crossed and pulling the value of 117?
这是设计使然。 TextBoxFor 和 HiddenFor 等所有 HTML 助手在绑定(bind)时首先使用 ModelState 的值,然后再使用模型的值。我认为您的 Controller 操作如下所示:
public ActionResult Foo(int id)
{
SomeModel model = ...
// At this stage model.Id = 0
return View(model);
}
问题是默认模型绑定(bind)器将一个值添加到 ModelState 中,其键 id
由帮助程序使用,并且模型属性值被忽略。这不是错误。这就是 HTML 助手的设计方式。刚开始不知道的时候会有点迷惑,但是一旦习惯了这种行为,就不会再掉入陷阱了。
解决此问题的一种方法是从 ModelState 中删除此值:
public ActionResult Foo(int id)
{
ModelState.Remove("id");
SomeModel model = ...
// At this stage model.Id = 0
return View(model);
}
或将模型中的 Id
属性重命名为其他名称以避免冲突。
关于asp.net-mvc-3 - hiddenFor 助手从 Action 参数中提取 id,而不是 viewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11190989/
简而言之:我想从可变参数模板参数中提取各种选项,但不仅通过标签而且通过那些参数的索引,这些参数是未知的 标签。我喜欢 boost 中的方法(例如 heap 或 lockfree 策略),但想让它与 S
我可以对单元格中的 excel IF 语句提供一些帮助吗? 它在做什么? 对“BaselineAmount”进行了哪些评估? =IF(BaselineAmount, (Variance/Baselin
我正在使用以下方法: public async Task Save(Foo foo,out int param) { ....... MySqlParameter prmparamID
我正在使用 CodeGear RAD Studio IDE。 为了使用命令行参数测试我的应用程序,我多次使用了“运行 -> 参数”菜单中的“参数”字段。 但是每次我给它提供一个新值时,它都无法从“下拉
我已经为信用卡类编写了一些代码,粘贴在下面。我有一个接受上述变量的构造函数,并且正在研究一些方法将这些变量格式化为字符串,以便最终输出将类似于 号码:1234 5678 9012 3456 截止日期:
MySql IN 参数 - 在存储过程中使用时,VarChar IN 参数 val 是否需要单引号? 我已经像平常一样创建了经典 ASP 代码,但我没有更新该列。 我需要引用 VarChar 参数吗?
给出了下面的开始,但似乎不知道如何完成它。本质上,如果我调用 myTest([one, Two, Three], 2); 它应该返回元素 third。必须使用for循环来找到我的解决方案。 funct
将 1113355579999 作为参数传递时,该值在函数内部变为 959050335。 调用(main.c): printf("%d\n", FindCommonDigit(111335557999
这个问题在这里已经有了答案: Is Java "pass-by-reference" or "pass-by-value"? (92 个回答) 关闭9年前。 public class StackOve
我真的很困惑,当像 1 == scanf("%lg", &entry) 交换为 scanf("%lg", &entry) == 1 没有区别。我的实验书上说的是前者,而我觉得后者是可以理解的。 1 =
我正在尝试使用调用 SetupDiGetDeviceRegistryProperty 的函数使用德尔福 7。该调用来自示例函数 SetupEnumAvailableComPorts .它看起来像这样:
我需要在现有项目上实现一些事件的显示。我无法更改数据库结构。 在我的 Controller 中,我(从 ajax 请求)传递了一个时间戳,并且我需要显示之前的 8 个事件。因此,如果时间戳是(转换后)
rails 新手。按照多态关联的教程,我遇到了这个以在create 和destroy 中设置@client。 @client = Client.find(params[:client_id] || p
通过将 VM 参数设置为 -Xmx1024m,我能够通过 Eclipse 运行 Java 程序-Xms256M。现在我想通过 Windows 中的 .bat 文件运行相同的 Java 程序 (jar)
我有一个 Delphi DLL,它在被 Delphi 应用程序调用时工作并导出声明为的方法: Procedure ProduceOutput(request,inputs:widestring; va
浏览完文档和示例后,我还没有弄清楚 schema.yaml 文件中的参数到底用在哪里。 在此处使用 AWS 代码示例:https://github.com/aws-samples/aws-proton
程序参数: procedure get_user_profile ( i_attuid in ras_user.attuid%type, i_data_group in data_g
我有一个字符串作为参数传递给我的存储过程。 dim AgentString as String = " 'test1', 'test2', 'test3' " 我想在 IN 中使用该参数声明。 AND
这个问题已经有答案了: When should I use "this" in a class? (17 个回答) 已关闭 6 年前。 我运行了一些java代码,我看到了一些我不太明白的东西。为什么下
我输入 scroll(0,10,200,10);但是当它运行时,它会传递字符串“xxpos”或“yypos”,我确实在没有撇号的情况下尝试过,但它就是行不通。 scroll = function(xp
我是一名优秀的程序员,十分优秀!