【问题标题】:passing a view-model with a controller around multiple Views围绕多个视图传递带有控制器的视图模型
【发布时间】:2012-11-20 17:24:00
【问题描述】:

所以我有 3 个视图、一个控制器和一个模型。 (只是一个例子)第一个视图设置用户的名字和姓氏。哪个被发回控制器,我可以在视图模型中看到数据。然后控制器调用第二个视图设置电子邮件(我可以从视图 1 调用数据)。第三个视图显示了所有数据(视图 1 中的原始内容已不存在)

@Html.DisplayFor(m => m.FirstName)
@Html.DisplayFor(m => m.LastName)
@Html.DisplayFor(m => m.Email)

您认为创建静态单例模型可以在控制器中工作吗?还是我应该使用 TempData

编辑:对不起,我忘了我的控制器

我的控制器中的 GET 方法是否需要参数?

   [HttpGet]
    public virtual ActionResult SignUp1(model m)
    {
        return View(m)
    }

【问题讨论】:

  • 为什么你的视图会互相传递模型?您应该在页面加载之间点击控制器...
  • @Bobson 在问题中完全忽略了我的控制器。它现在在那里。

标签: c# asp.net-mvc razor


【解决方案1】:

您可以使用@Html.Partial("view name", object) 调用另一个视图,如果您想执行逻辑,您可以使用@Html.Action("action", "controller", object) 调用另一个控制器操作。那么它就像任何其他控制器动作一样。通常从视图调用的动作都用[ChildActionOnly]

装饰

【讨论】:

    【解决方案2】:

    静态对于网页来说是个坏主意,因为它本质上不是线程安全的 (see here)。这意味着如果你有两个或更多人同时使用它,你会得到非常奇怪的行为。

    我不确定您为什么要考虑这样做 - 您考虑这样做有什么具体原因吗?正确的做法是将模型从每个视图发布回每个控制器操作,每次填充更多数据。或者,您可以回发到相同的操作,然后根据模型中缺少哪些字段(如果没有,则显示)返回适当的视图。

    【讨论】:

    • 是的到中间部分!我想在浏览视图时构建模型,但我无法做到这一点,除非我应该有隐藏字段来重新填充我之前在视图中填充的内容
    • @FreshJays - 是的,这将是最好的方法。替代方法包括将其存储在数据库或Session 中。您不想使用 ViewDataTempData,因为它们不会持续发布,IIRC。
    • 到目前为止非常感谢!这是我尝试以这种方式实现时的问题: View1 我设置了名字 -> View2 我可以检索并读取名字 -> 当我将表单从 View2 发布到我的 Post 方法时,在模型中名字是空白的。它被清除了
    • :) 我想会的,让我试试,希望数据还在
    • 数据没有保留,名字和姓氏仍然是空白...我认为隐藏字段是我唯一的选择?
    猜你喜欢
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多