【问题标题】:ASP.net mvc3 Get data from View to Controller C#ASP.net mvc3 从视图获取数据到控制器 C#
【发布时间】:2011-10-11 08:35:04
【问题描述】:

我目前正在使用 ViewBag 将数据表和其他一些动态数据传递给视图。数据在表格中显示给用户,并且根据用户选择的列,执行某些计算。我的问题是,这些计算需要被链接起来,这样当用户执行计算时,数据的状态会被保持,然后可以对该数据进行进一步的计算。

如何每次从视图中获取当前数据表状态到控制器中?需要在该当前状态上执行计算。

如果有什么不同,我可以轻松地将视图更改为强类型视图,并创建一个新对象来抽象数据表和其他动态数据。

欢迎任何建议。

谢谢。

【问题讨论】:

    标签: c# asp.net asp.net-mvc-3


    【解决方案1】:

    这对我来说听起来像是某种 AJAX。您应该能够将状态发布回服务器(控制器中的另一种方法)并根据需要存储它。

    MVC3 有一些很棒的 JSON 内容,它们应该会让你的生活更轻松。那+jQuery,你应该笑了。

    【讨论】:

      【解决方案2】:

      我鼓励您尽可能避免使用 DataTables 和 DataSets。它们应该被认为是最糟糕的一种 DTO,因为您永远无法保证它们包含什么以及何时包含(除非您按照调用链返回到它们的起源并确保它们在途中的任何地方都没有更改)。

      通过使用适当的视图模型,您只需查看它们就知道它们包含什么,您还可以将所有格式化逻辑放在它们内部而不是视图中。

      我写了一篇关于为什么应该使用视图模型的博客文章:http://blog.gauffin.org/2011/07/three-reasons-to-why-you-should-use-view-models/

      至于您的问题:最简单的方法是使用 jQuery/Ajax 并返回 Json(如果您使用正确的视图模型,这很容易)。

      <script type="text/javascript">
       $(function() { //<-- runs the script when the document has been loaded
      
          $('#formid').submit(function() { // <--- hook form submit event
      
              $.post('@Html.Action("CalcOne")?option='+ $('#id').val(), function(data) {
                  var result = data.result;
                  $.post('@Html.Action("CalcTwo")?option='+ result, function(data) {
                          //do third calc
                  });
              });
          });
       });
      </script>
      

      在你的控制器中:

      [HttpPost]
      public ActionResult CalcOne(int option)
      {
          //do some calculations
          return Json(new MyModel{ Result = option + 1 });
      }
      

      【讨论】:

      • 感谢您的回答,我同意,我通常使用 ViewModels。但是在这种情况下,存储在数据表中并显示给用户的数据不能轻易地封装在 VM 中。根据用户选择的内容以及他们选择透视或计算的内容,这些列可能会有很大差异。这就是我在本例中选择 DT 的原因。
      • 答案仍然适用。您需要使用类似示例方法的方法
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      相关资源
      最近更新 更多