ASP.net mvc3从视图获取数据到控制器C#
问题描述:
我目前使用ViewBag将数据表和其他动态数据传递给视图。数据以表格的形式显示给用户,并根据用户选择的列来执行特定的计算。我的问题是,这些计算需要进行链接,以便在用户执行计算时保持数据的状态,并且可以对该数据进行进一步的计算。ASP.net mvc3从视图获取数据到控制器C#
每次如何从视图中获取当前数据表状态到控制器?计算需要在当前状态下执行。
如果它有什么不同,我可以很容易地将视图更改为强类型视图,并创建一个新对象来抽象数据表和其他动态数据。
欢迎任何建议。
谢谢。
答
这听起来像一些AJAX给我。您应该能够将状态发回服务器(控制器中的另一种方法),然后将其存储在您需要的位置。
MVC3有一些伟大的JSON的东西,应该让你的生活更轻松。那+ jQuery,你应该笑。
答
如果可能,我鼓励您避免使用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 });
}
感谢您的回答,我同意,我一般用的ViewModels。但是在这种情况下,存储在数据表中并显示给用户的数据不能轻易地封装在VM内。该列可以相当显着变化,这取决于用户选择什么,以及他们选择什么样的转动或计算上。这就是为什么我在这种情况下选择了DT。 –
答案仍然适用。你需要使用类似于示例方法的东西 – jgauffin