我们在ASP.NET中使用Web表单开发了遗留系统,我们正在重新设计并希望使用ASP.NET MVC重写应用程序。
我目前正在通过Steven Sanderson的“Pro ASP.NET MVC2框架”让自己加快速度。
该应用程序是一个客户调查表单,它根据区域和设备类型从sqlserver数据库生成问题和答案。该应用程序使用.ascx控件,“asp:PlaceHolder”控件和javascript来隐藏和取消隐藏基于用户输入的问题。
(rb2.Attributes.Add(“onclick”,“show_rb010followup('”“+ strWebCtrl +”',1);“);)
该网站根据最终用户的答案提供动态生成的问题和后续问题。例如。如果用户在回答问题时选择“有点不满意”或“非常不满意”,则会隐藏后续问题以提示用户提供进一步的信息。
.ascx控件当然在处理控制逻辑的页面后面有代码。
我向大家提出的问题是,使用MVC设计模式,以最佳方式实现这些动态问题和答案。
答案 0 :(得分:3)
我最近开发了一个包含它的系统。 MVC比WebForms稍微困难一点,因为MVC并不假装是有状态的(在WebForms中,你可以以编程方式在包含控件内部创建一个新控件)。 编辑 - 正如jfar指出的那样,实际上并不是 困难 ,但需要采用不同的方法和对Web技术的欣赏。
每个问题都可以配置为具有先决条件/答案。这意味着你可能有一个问题,答案可以选择(你的头发是什么颜色?选项:红色,金发,棕色等)然后是另一个问题,前一个问题作为先决条件,答案是红色,金发和先决条件的答案。
当每个问题都完成后,代码会经过并根据排序顺序和满意的先决条件确定下一个问题应该是什么。
显然,这些都不是特定于MVC的。
就UI交互而言,我有一些jQuery将AJAX请求发送到服务器以更新其状态并获取下一个问题的详细信息。我从AJAX请求中返回部分视图以呈现jQuery。部分视图负责呈现什么类型的视图(有些人可能不同意这一点,并且会说控制器应该呈现不同的视图),因为它检查枚举,定义要创建的输入类型并为其呈现HTML。输入
如果用户刷新他们的页面,我建议让控制器能够重新呈现自定义答案的当前状态(提供此页面的GET请求的视图应该检查会话以查看是否已经有任何问题已完成)。
这显然不是完全可访问的,因此您需要一个稍微修改过的解决方案才能在没有启用Javascript的情况下完成此工作,但除非您感兴趣,否则我不会详细说明。
让我知道你是否有兴趣看到特别的代码。
另外,您可以查看这两个项目中的一个:MVC Dynamic Forms和MVC XForms。我曾短暂地尝试过,但决定自己编写。尽管如此,他们会在另一个answer上推荐。
答案 1 :(得分:1)
您可以使用ajax(在jQuery $ .ajax中)加载局部视图。
使用ajax将给定答案的答案发布到解释给定答案的操作,并返回应该在答复中可见的html。替换或添加服务器的响应。
恕我直言:这将使用.Aspx场景更清晰地了解服务器上发生的事情。