【问题标题】:ASP.NET MVC Model DesignASP.NET MVC 模型设计
【发布时间】:2013-05-20 13:53:17
【问题描述】:

我有 6 页,每页都有自己的表单,以及与该表单关联的模型。我想做的是将所有信息存储在所有 6 个表单上,以便用户可以在 6 个页面中的任何一个页面之间切换,并且仍然可以保存他们以前的工作。这个想法是用户应该能够以任何顺序填写页面上的表格并随时返回他们的工作。

维护所有这些信息的最佳方式是什么?我是否应该创建一个包含所有其他模型的超级模型,并且只将此模型传递给其他页面?谢谢!

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    获取(从数据源)哪些数据与当前页面相关并显示它。如果您想显示页面中的所有数据(例如:所有页面的摘要页面, 创建一个包含所有数据的视图模型)。您可以从各种来源获取数据,例如 DB 表/Web 服务/XML 文件/缓存数据/Session 等。

    每个视图都可以绑定到单独的视图模型。

    public class AddressVM
    {
      //properties for address page
    }
    
    public class BillingInfo
    {
      //properties for Billing Info page
    }
    
    public class OrderSummaryVM
    {
     public AddressVM ShippingAddress {set;get;}
     public BillingInfo BillingDetails {set;get;}
    }
    

    摘要页面可以绑定到OrderSummaryVM 类,而单个页面可以绑定到AddressVMBillingInfoVM

    【讨论】:

    • 我同意,这看起来是一个很好的后备数据存储应用程序。
    • 对不起,我没有关注。如果我有 Page A 和 Page B,以及 PageAModel 和 PageBModel,当我回发到 Page A 时,用户的输入被保存(感谢模型绑定)。如果我点击页面B,然后点击返回页面A,我如何保留他们最初对页面A所做的更改?从您的回答中我不明白如何做到这一点。对不起,谢谢。
    • @JohnEdwards:当您返回 Page 时,从数据源(您的 db/XML 文件/Webservice/Session/Cache)读取数据并将其加载到那里。
    • 有道理,但是当用户点击另一个链接时如何保存用户所做的事情?
    • @JohnEdwards:使用javascript-jquery,监听链接上的click事件,读取表单数据,用数据对action方法进行ajax调用,将数据保存在action方法中。您可以序列化整个表单并发送到您的操作方法。模型绑定也适用于此。
    【解决方案2】:

    您正在寻找的是如何在 MVC 应用程序中管理会话。

    有几种方法可以做到这一点。

    你可以使用ViewData, ViewBag, TempData or Session

    另一种方法是只有一页包含六种表格。 用户将使用 javascript 浏览表单以显示/隐藏适当的内容。 最后,他会将所有数据提交给您的控制器。您可以将数据保存在 cookie 中,这样如果他关闭并重新打开浏览器,他仍然可以看到他输入的内容。

    【讨论】:

    • 最后一个建议的最大问题是当 JS 被禁用时会发生什么。您要么有一个包含所有 6 个表单字段的页面(相当多),要么就是无法正常工作。
    • 当然这取决于网站的要求。只有一小部分人禁用了 javascript。 stackoverflow.com/questions/9478737/… 不过确实要牢记。
    猜你喜欢
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多