2016-11-10 82 views
0

我正在学习用于创建Web应用程序的ASP.NET MVC。更改视图模板

我有2种型号:fooAfooB(具有型fooA的属性)。 控制器查看自动生成。

现在,我想做的变化不大创建fooB的观点

  • 如果有fooA则会显示正常的下拉菜单的条目;
  • 如果没有fooA的条目然后会出现一个按钮与以下行为:
    • 保存剩余的输入数据;
    • 重定向到fooA创建视图;
    • 重定向回fooB创建视图恢复数据。

我希望我没有很好地解释。

我的问题从问题开始:我应该在视图还是控制器“一侧”进行这种更改?那我该怎么做呢?

谢谢。

+0

好,你可以在View中使用Razor或jQuery来完成,它依赖于提供一些源代码。 – Carlos28

+0

我没有包含源代码,因为它几乎是由Visual Studio创建的模板。 – nervousDev

回答

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以获取新数据。

通过这样做,您不必在页面之间前后重定向,并尝试通过重定向过程来维护数据。

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

+1

我知道这样会更容易。问题是,我需要重定向到“创建视图”并重新导回恢复的数据。这是一个要求。谢谢。 – nervousDev

0

所以,如果你知道,如果有fooA的条目时,页面加载,它不会改变,那么你可以简单的使用剃刀if语句进行CSHTML文件:

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

Sample

这是你要找的吗?

+0

我知道。我的问题是“按钮操作”。我需要执行一系列步骤:保存数据,转到页面,使用恢复的数据重定向。谢谢! – nervousDev

+1

那么也许可以使用Bootstrap modal作为fooA编辑器(http://v4-alpha.getbootstrap.com/components/modal/)? – Carlos28

0

看到一些评论,并且必须在单独的视图中创建“fooA”这一事实。实际上,这将需要视图和控制器更改,但是您需要的大部分操作都将在控制器操作中进行。

有几十这个选项,但我这是我想借此(所以把它当作一粒盐)路线:

  • 有一个MyController.CreateFooB动作,这是你的标准[HttpPost]行动创建fooB模型时fooA不需要创建
  • 有一个MyController.CreateFooBAndRedirectToFooA,这也是一个[HttpPost]
    • 这一行动将需要fooB视图模型作为参数,并会在你的databa创建模型SE或存储设备
    • 创建模型后,redirec到MyController.CreateFooA是一个[HttpGet]行动,以及FooB模型的ID传递给动作(可以执行用户提交到MyController.CreateFooA背部
    • 后重定向方式他们[HttpPost],创建模型A和执行另一重定向到MyController.EditFooB使用户可以绑定新的FooA到FooB

你如何实现EditFooB取决于你(传递A的ID并将其放入更新表单中,迫使用户将其从下拉列表中选出)等等。但最终与你所描述的工作流程,你需要做一个后创建乙 - >重定向创建一个 - >后创建一个 - >重定向到更新乙