ASP.net mvc3从View获取数据到Controller C#

时间:2011-10-11 08:35:05

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

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

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

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

欢迎任何建议。

感谢。

2 个答案:

答案 0 :(得分:0)

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

MVC3有一些很棒的JSON东西,可以让你的生活更轻松。那个+ jQuery,你应该笑。

答案 1 :(得分: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 });
}
相关问题