【问题标题】:ViewBag used in model binding [duplicate]模型绑定中使用的 ViewBag [重复]
【发布时间】:2017-07-06 21:57:57
【问题描述】:

如何阻止 ViewBag 中的值绑定到 MVC 中的控件?视图不是强类型的。

我正在使用 ViewBag 将数据表传递给视图。此数据表作为值传递给使用HtmlHelper 上的扩展方法构建的自定义控件。

视图有一些依赖于 EntityID 的逻辑,所以我使用 ViewBag 将 EntityID 传递给视图。

该控件构建了一个名为“EntityID”的隐藏字段,而不是使用我从数据集传递给 html 帮助程序的值,而是绑定到 ViewBag 中的值。

return htmlHelper.Hidden(name, value, attributes);

如何让HtmlHelper 使用我的值而不是使用 ViewBag 中的值?

当视图被渲染时会发生这种情况。

通过 Ajax GET 请求调用视图控制器,返回的视图 html 附加到 div

GET 请求将对象发送到操作方法。该对象有一个名为 EntityID 的属性

【问题讨论】:

  • 这就是HtmHelper方法的工作方式——他们首先检查ModelState中的值,如果没有找到,然后检查ViewData,最后是模型属性。
  • @StephenMuecke 我可以构建一个隐藏的输入控制字符串,但我想知道是否有办法阻止HtmlHelper 在模型绑定期间使用 ViewBag。
  • 您能否提供更多上下文 - 是在第一次呈现视图时发生这种情况,还是仅在您提交后返回视图,或者方法具有与名称匹配的参数时发生。
  • @StephenMuecke 我修改了问题以添加更多上下文。
  • 生成此视图的 GET 方法是否包含名为 entityID 的参数? (需要排除ModelState)。

标签: asp.net-mvc asp.net-mvc-4 model-binding


【解决方案1】:

您不能对 HTML 助手的内部工作进行太多限制,但您始终可以呈现自己的:

<input type="hidden" name="@Html.NameFor(m => m.EntityID)" value="@Model.EntityID" />

【讨论】:

    猜你喜欢
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    相关资源
    最近更新 更多