【问题标题】:ASP.NET MVC Model contents disappears randomlyASP.NET MVC 模型内容随机消失
【发布时间】:2010-09-24 11:41:57
【问题描述】:

在初始 cmets 后更新

模型中有一个名为“Account”的对象,其中有一个 int 属性 (Account.AccountID)

ViewB 有一个收集一些额外信息的表单 - 但也有一个填充有 Model.Account.AccountID 的文本框。

但是,当我提交 ViewB 时,Model.Account 变为空。


在我解释问题之前,显示一个简化版本可能更容易:

[HttpGet]
public ActionResult ViewA()
{
  return View(new BlahModel());
}

[HttpPost]
public ActionResult ViewA(BlahModel model)
{
  if(there_was_a_problem)
    return View("ViewA", model);
  else
    return View("ViewB", model);
}

// have tried both httppost, httpget and no attribute here
public ActionResult ViewB(BlahModel model)
{
 return View(model);
}

我通过 GET 加载 ViewA,填写强类型表单并提交 - 然后以下 View(再次 ViewA 或 ViewB,如果请求没有问题)就可以了……它可以完全访问整个模型并可以显示其中的属性。

问题是,如果我随后在 ViewB 中提交一个表单(该表单发布到 ActionResult ViewB) - 模型突然在整个过程中都有空属性,即使它使用相同的模型 - 并且在发布之前已经拾取了所有值成功。

有什么想法吗?

非常感谢

【问题讨论】:

  • ViewB 上有哪些您希望填充模型的 html 对象?在调试中运行并查看 response.form 对象

标签: asp.net-mvc controllers


【解决方案1】:

很可能 - ViewB 视图渲染不足,模型绑定器找不到要绑定的值。

动作参数与表单值绑定。您是否通过模型正确查看都没关系。渲染出来才是最重要的(或通过查询字符串/cookies)。

【讨论】:

  • 非常感谢,我检查了 POST 并从中发现有人将显示 AccountID 的文本框设置为“已禁用”
【解决方案2】:

作为 Arnis L.'s answer 的补充,您可以使用 Firebug 之类的工具来检查模型的参数(或任何参数)是否随请求一起发送。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2010-11-01
    • 2017-08-16
    • 2020-01-26
    • 1970-01-01
    • 2012-10-31
    相关资源
    最近更新 更多