2011-10-11 93 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

相關問題