2011-10-11 92 views
0

我目前使用ViewBag将数据表和其他动态数据传递给视图。数据以表格的形式显示给用户,并根据用户选择的列来执行特定的计算。我的问题是,这些计算需要进行链接,以便在用户执行计算时保持数据的状态,并且可以对该数据进行进一步的计算。ASP.net mvc3从视图获取数据到控制器C#

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

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

欢迎任何建议。

谢谢。

回答

0

这听起来像一些AJAX给我。您应该能够将状态发回服务器(控制器中的另一种方法),然后将其存储在您需要的位置。

MVC3有一些伟大的JSON的东西,应该让你的生活更轻松。那+ jQuery,你应该笑。

0

如果可能,我鼓励您避免使用DataTables和DataSet。他们应该被认为是最糟糕的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 }); 
} 
+0

感谢您的回答,我同意,我一般用的ViewModels。但是在这种情况下,存储在数据表中并显示给用户的数据不能轻易地封装在VM内。该列可以相当显着变化,这取决于用户选择什么,以及他们选择什么样的转动或计算上。这就是为什么我在这种情况下选择了DT。 –

+0

答案仍然适用。你需要使用类似于示例方法的东西 – jgauffin

相关问题