我目前正在使用ViewBag将一个Datatable和一些其他动态数据传递给视图。数据在表格中显示给用户,并且根据用户选择的列,执行某些计算。我的问题是,这些计算需要链接,以便当用户执行计算时,数据的状态得以维持,然后可以对该数据进行进一步的计算。
如何每次从视图中获取当前数据表状态到控制器?需要在当前状态下执行计算。
如果它有所不同,我可以轻松地将视图更改为强类型视图,并创建一个新对象来抽象数据表和其他动态数据。
欢迎任何建议。
感谢。
答案 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 });
}