从视图获取数据到控制器c#

本文关键字:控制器 数据 视图 获取 | 更新日期: 2023-09-27 18:10:51

我目前使用ViewBag传递一个Datatable,以及其他一些动态数据到视图。数据以表的形式显示给用户,并根据用户选择的列执行某些计算。我的问题是,这些计算需要被链接起来,这样当用户执行计算时,数据的状态就会得到维护,然后就可以对该数据进行进一步的计算。

我怎么能得到当前的数据状态从视图到控制器每次?需要对当前状态进行计算。

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

欢迎指教。

谢谢。

从视图获取数据到控制器c#

这听起来像是AJAX。你应该能够将状态发送回服务器(控制器中的另一个方法),并根据需要存储它。

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

我建议您尽可能避免使用数据表和数据集。它们应该被认为是最糟糕的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 });
}