更改视图模板

时间:2016-11-10 14:08:50

标签: asp.net-mvc

我正在学习ASP.NET MVC来创建Web应用程序。

我有2个模型: fooA fooB (具有 fooA 类型的属性)。 控制器视图自动生成。

现在,我想在 fooB 创建视图中进行一些更改:

  • 如果有 fooA 条目,则会显示正常下拉列表;
  • 如果没有 fooA 条目,则会出现一个按钮,其中包含以下行为:
    • 保存剩余的输入数据;
    • 重定向到 fooA 创建视图;
    • 重定向回 fooB 创建视图并恢复数据。

我希望我能很好地解释。

我的问题从问题开始:我应该在View或Controller“方面”进行此更改吗?那怎么办呢?

谢谢。

3 个答案:

答案 0 :(得分:0)

根据您的描述,我认为这就是您想要的。当用户导航到包含fooB的视图时,如果有数据,则显示drop-down list。如果没有,请尝试为drop-down list创建数据。这是我的建议。

  1. 当用户导航到包含fooB的视图时,只需显示drop-down list(即使它为空),然后在其旁边显示一个名为Add(或任何您想要的)的按钮
  2. 当用户点击Add时,会出现一个弹出窗口,其中包含用于冻结drop-down list数据的必要字段。
  3. 当用户点击Create时,只需对服务器进行Ajax调用即可创建数据。然后,显示成功或失败消息,并在需要时刷新drop-down list以获取新数据。
  4. 通过这种方式,您不必在页面之间前后重定向,也可以尝试通过重定向过程维护数据。

    我希望你明白我的意思。如果您发现任何不清楚的地方,请随时留下问题。

答案 1 :(得分:0)

因此,如果您知道页面加载后是否有 fooA 条目且不会更改,那么您可以简单地使用 Razor if语句在你的cshtml文件中:

@if (fooA != null)
{
    ...code with dropdown...
}
else
{
   ...code with button...
}

Sample

这是你在找什么?

答案 2 :(得分:0)

看到一些评论,以及" fooA"必须在单独的视图中创建。实际上,这将需要视图和控制器更改,但您需要的大部分操作都将在控制器操作中。

这有很多选择,但我这就是我要采取的路线(所以要带上一粒盐):

  • 执行MyController.CreateFooB操作,这是您在不需要创建fooA时创建fooB模型的标准[HttpPost]操作
  • 拥有MyController.CreateFooBAndRedirectToFooA,这也是[HttpPost]
    • 此操作需要fooB View Model作为参数,并将在您的数据库或存储设备上创建模型
    • 创建模型后,重定向到MyController.CreateFooA [HttpGet]操作,并将FooB模型的ID传递给操作(这样您就可以执行重定向回来
    • 用户使用MyController.CreateFooA提交[HttpPost]后,创建模型A并执行另一个重定向到MyController.EditFooB,以便用户可以绑定新的FooA到FooB

如何实施EditFooB非常取决于您(传递A&#39的ID并将其放入更新表单,强制用户从下拉列表中选择它等)。但最终使用您描述的工作流程,您需要执行发布以创建B - > 重定向到创建 - > 发布以创建 - > 重定向到更新B