【问题标题】:ASP.Net MVC Client Side and Server Side CalculationsASP.Net MVC 客户端和服务器端计算
【发布时间】:2014-07-05 00:37:08
【问题描述】:

我是 ASP.Net MVC 的新手,我正在努力保持对 MVC 开发模式的正确使用。我有点迷失在各种不同的技术中。

基本上,我的表单是针对模型进行强类型化的。为简单起见,假设模型中有三个整数。 Int1、Int2 和总计。我想创建一个表单,允许用户在 Int1 和 Int2 中输入值,然后在其中任何一个发生更改时立即更新向用户显示的 Total 字段。然后,如果用户对总数感到满意,我希望允许用户点击保存,然后将所有三个字段都保存到数据库中的 HTTP Post 回控制器。

现在我使用 Jquery OnChange() 进行计算并设置有效的总计值。但是,当我在自己的视野内进行计算时,我感觉好像我正在远离真正的 MVC。

像 Knockout 和 JSON 这样的东西在这里会如何发挥作用?我想尽可能地遵循 MVC 的最佳实践。

【问题讨论】:

  • 为什么要发布Total,如果可以在服务器上计算为Int1 + Int2?
  • 我试图使表单的示例变得简单。假设我希望用户在点击保存之前知道 In1+Int2 的总数,方法是向他们显示。这样,他们可以在将总数发布回服务器以保存到数据库之前尽可能多地更改 Int1 或 Int2。
  • @user3644926:D.Rosado 说得对,将总数发回服务器是多余的。假设您的用户足够聪明,可以更改总价值(例如,他购买了价值 100 美元的两件商品,并将总价值更改为 2 美元)。当值被回发时,您仍然希望计算总数。在网页上显示总数实际上应该仅用作对用户有用的提示,而不是依赖于表单的值。并不是说你的方法本身就是错误的,但它可能会导致更多错误和恶意行为。

标签: jquery asp.net-mvc json knockout.js


【解决方案1】:

MVC 只处理将请求的网页发送到用户的网络浏览器。一旦浏览器接收到,MVC 将不会再次进入图片,除非你发送一个新的 web 请求(无论是通过页面重定向、ajax 调用,还是任何其他方式发起 web 请求)。

浏览器中发生的任何事情都不是 MVC 的一部分。这并不意味着您应该避开基于客户端的交互!这仅意味着您将使用 MVC 以外的东西来提供这部分用户体验。

如果您对客户端流畅的用户体验有相当大的需求,有很多 JavaScript 框架可供选择。

但是对于当用户输入单独的值时计算总和的例子,这可以很容易地通过 javascript 来解决,也许最好是 jQuery。

但您不必担心脱离 MVC 结构。它不应该是一个包罗万象的框架。 ASP.Net MVC 和 javascript/jQuery 之间有很好的协同作用,我只能鼓励这种方法。

长话短说:您走在正确的轨道上。没有理由怀疑自己。

【讨论】:

  • 非常感谢大家!独自完成这些事情,还有很多事情要处理。不过开始搞清楚了。使用 jQuery/Knockout 通过显示来自表单输入的任何必要计算,使视图对用户输入的响应更加灵敏。然后不会将这些值发布回控制器以维护安全性并在保存到控制器内的客户端之前重新计算
  • 请记住,从数据发送/存储的角度来看,计算的数据(例如总和,如果您已经知道要添加的所有数字)永远不会相关。它们也不应该存储在您的数据库中。除非重新计算(并获取所有需要的数据)是您不愿意承受的性能损失(大多数情况下可以忽略不计)
【解决方案2】:

Knockout 和 JSON 仍会发回服务器。鼓励在客户端做事,因为它使您的应用程序更具响应性。仅在绝对必要时才应发布到服务器。在某种程度上,我倾向于在客户端做尽可能多的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 2013-04-24
    • 1970-01-01
    • 2023-04-08
    • 2013-10-09
    • 1970-01-01
    相关资源
    最近更新 更多