【问题标题】:How to use HiddenFor如何使用 HiddenFor
【发布时间】:2017-12-22 11:12:03
【问题描述】:

我想知道当我动态拉入数据以填充我的视图时,如何正确使用 HTML 帮助器方法 HiddenFor。

在尝试使用 HiddenFor 之前,我使用以下代码使用常规隐藏元素:

@Html.Hidden("Answers["+i+"].FormEntryId", entry.FormEntryId)

这会产生以下 HTML:

<input id="Answers_0__FormEntryId" name="Answers[0].FormEntryId" type="hidden" value="d318afa2-42ba-4205-9f8a-9d7e6ad59ea4">

如您所见,它非常脆弱,因为它依赖于字符串文字。然后我和另一位开发人员决定尝试使用 HiddenFor,如下所示:

@Html.HiddenFor(x => x.Answers[i].FormEntryId, entry.FormEntryId)

这会产生以下 HTML,注意空值字段:

<input data-val="true" data-val-required="The FormEntryId field is required." id="Answers_0__FormEntryId" name="Answers[0].FormEntryId" type="hidden" value="">

x 是我们 ViewModel 的替身。然而,一旦我们切换到这种方法,我们遇到了一个障碍,我们的 id 值没有被填充。因此,我想知道使用 HiddenFor 的正确方法是什么,以及在处理动态视图时是否可以这样做。视图模型如下所示:

【问题讨论】:

标签: c# .net unobtrusive-validation


【解决方案1】:

您实际上使用了错误的HiddenFor 辅助方法重载,您已经在迭代Answers 集合,您只需要使用this overload,它只需将表达式作为单个参数,例如:

@for(int i=0; i<Model.Answers.Count; i++)
{
  @Html.HiddenFor(x => x.Answers[i].FormEntryId)
}

这本身将负责生成正确的输入元素的idname 属性,以便它们的值在模型/视图模型对象中回发到控制器操作。

这应该适合你。

旁注:

如果您有带有模型/视图模型的强类型视图,则应始终使用字符串类型的辅助方法,例如 TextBoxForHiddenForDropDownListFor 等,而不是普通的辅助方法,因为这些方法需要更多工作,强类型的将负责通过 Form post 发回输入元素的新值。

希望对你有帮助!

【讨论】:

  • 非常感谢您的帮助。但是,在我们的例子中,我们需要发布该 id,但它没有该值。对我们来说,具有价值的是 entry.formEntryId。我们只是将 answers[i].formEntryId 与它动态关联。
猜你喜欢
  • 1970-01-01
  • 2018-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多