基于单一模型的MVC ASP.NET多视图

时间:2014-09-28 17:14:44

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

我需要编写一个移动Web应用程序(MVC),在那里我获得了我需要工作的UI设计,我不确定最佳方法,并且正在寻找任何建议。

简化项目:

  • 第一个视图要求输入数字
  • 第二个视图要求提供类别
  • 根据前两个值的逻辑,我可以显示最多6个不同的表单/视图,每个表单/视图收集不同的数据。

然后将此数据写入单个SQL表

我不确定我是否应该:

  • 有一个控制器和一个型号,我只是跟踪哪个View需要在该控制器中显示 OR
  • 拥有多个型号,每个型号都基于之前的型号 OR
  • 使用面板(即用于WebForms),并根据跟踪需要查看的部分再次显示这些面板。

任何建议都将不胜感激, 标记

2 个答案:

答案 0 :(得分:0)

这一切都取决于模特。

案例1: 只有一个数据库表(即一次调查)
如果只有一个数据库表,那么你只需要一个控制器和一个View。

例如:

public class Survey
{
    public String Answer1 { get; set; }
    public String Answer2 { get; set; }
    public String Answer3 { get; set; }
}

视图可以询问第一个问题,并相应地显示相应的字段。因此,只有最终的提交按钮才是HTTP Post。之前的所有按钮都只执行简单的JavaScript操作。

案例2: 第一个问题用于决定用户应该采取哪种调查。

我将有一个返回初始视图的Action。该视图将HttpPost执行到另一个Action(ShowSurvey

public ActionResult Index()
{
    return View();
}

[HttpPost]
public async Task<ActionResult> ShowSurvey(string id)
{
    switch(id)
    {
        // display the appropriate View here.
    }
}

ShowSurvey将采用一个参数,您可以使用该参数知道您应该显示哪个调查。此操作将拥有自己的视图/视图。 (如果所有调查问题都相似,则有一种观点。否则,您可能需要获得更多观点)。

这将是我的方法BTW。欢迎批评者!

<强>更新

我再次阅读了你的问题,你提到你只有一个SQL表。因此,案例1将是最简单的方法。

显示初始问题。使用JavaScript确定在运行时显示的内容等。用户完成所有问题的回答后,您可以向他显示(或启用)提交按钮,该按钮将执行HTTP Post回到您的操作并将数据提交到数据库。

PS:我之所以使用调查这个词只是因为问题让我想起了这些:P

答案 1 :(得分:0)

问题是这两者是如何相关的?输入第一个字段的值是否会对第二个字段产生影响?我构建了一些简单的两个字段模型或 - 因为我喜欢传递查看显式结构,我会在包含可用选项列表的模型中添加另一个字段,所以它将是:

public class MySimpleModel{        
    public int MyNumber{get; set;}
    public string MyCategory{get; set;}
    public List<string> Categories{get; set;}
}

然后发布控制器(通过常规表单提交或ajax):

public class MyController:Controller{
    [HttpGet]
    public ActionResult Index(){
        return View();
    }
    [HttpPost]
    public ActionResult Index(MySimpleModel model){
        if(model==null)
            return Index();
        if (model.MyNumber>3 && model.MyCategory=="xxx")
            return View("View1",model);
        //etc. 

    }
}

关于用户界面 - 使用户友好且合乎逻辑。你没有写过关于要求的任何内容,所以很难建议你:)