2016-06-07 45 views
0

我需要從不同的查詢中獲取單獨的數據,問題是,如果這樣的代碼可能執行?或者是否有任何其他解決方法或方法來使其中一個感謝!是否有可能直接在視圖中執行

@foreach (var item in Model) { 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.Title) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.ReleaseDate) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.Genre) 
    </td> 
    <td> 
     @{ 
      sqls = "select sum(Disc-Html.DisplayFor(modelItem => item.Price))as D 
         from table " 
      DB.Open(); 
      DataSet ds = new DataSet(); 
      ds = DB.getData(sqls); 
      int P =ds.Tables[0].Rows[0]["D"]; 
      return P; 
     } 
    </td> 
    <td> 
     @Html.ActionLink("Edit", "Edit", new { id=item.ID }) | 
     @Html.ActionLink("Details", "Details", new { id=item.ID }) | 
     @Html.ActionLink("Delete", "Delete", new { id=item.ID }) 
    </td> 
</tr> 
} 
+0

所以能夠寫出內部視圖 –

+0

最好的方法是具有視圖模型的任何C#代碼,將具有所有必要的數據來填充視圖,只傳遞該模型,以查看....(有這種方法的一些用法 - 你可以更新一個活的網站而不用重新設置它,如果是類或控制器會重置會話並重新啓動網站) –

回答

0

最好從視圖分離登錄問題並將其放置在控制器中。查看的工作就像一個模板,用於顯示控制器處理的數據,因此應該在整個項目中保持一致。從您的代碼看來,您需要檢索2個數據庫表數據,在這種情況下,使用ViewModel來加入2個類(我假設你有模型中的2個類)和控制器將處理您需要獲取並返回ViewModel到您的視圖。請記住,雖然您需要將ViewModel強制綁定到您的視圖。

+0

是的,2查詢不同的數據庫。我想我會去研究那個viewModel。 – JJBG

+0

好,你會發現很容易在ViewModel上顯示你想要的數據。祝你好運! :-) –

0

任何代碼都可以從視圖中執行,但需要詢問是否應該。

我建議閱讀關於MVC設計模式的更多內容以及它應該實現的內容。簡而言之,視圖只是在其他應用程序層處理過的數據和業務邏輯的可視化表示,然後由模型提供。

因此,請在其他位置訪問數據並將結果放在模型上。

+0

謝謝,多數民衆贊成爲什麼即時通訊問是否有任何其他解決方法或代碼 – JJBG

+0

這真的不是'解決方法'的問題,這是使用MVC架構,因爲它應該使用的問題。由於您繞過了預期的結構,因此您上面所做的是「解決方法」。 – DvS

+0

在我的情況下,我沒有看到任何其他方式來加載特定的列,也許會來自另一個模型或數據庫。 – JJBG

0

可以執行鍼對C#代碼太(你的代碼是錯誤的反正,因爲它說return P這這裏什麼都不做),但MVC的目的是不要做這種類型的混合代碼

MVC受到重創的原因是因爲關注的分離。我們有更大的靈活性,如果我們遵循這個規則,使用視圖只顯示數據,而不是在那裏做任何邏輯的東西,控制器,在那裏你必須寫的地方你的邏輯的

我們可以改變你的代碼遵循MVC模式如下。

就在您從您的控制器上執行return View(model)之前,請執行相同的foreach循環並獲取所需數據並將其分配給新屬性。

foreach (var item in ModelList) // ModelList must be your List of model variable 
    { 
    sqls = "select sum(Disc)as D from table 
      where P = Html.DisplayFor(modelItem => item.Price)"; 
    DB.Open(); 
    DataSet ds = new DataSet(); 
    ds = DB.getData(sqls); 
    int P =ds.Tables[0].Rows[0]["D"]; 
    item.P = P;      //assigning to a new property P 
    } 

    return View(ModelList); 

現在您在每個項目的屬性中都有所需的值。您可以簡單地在視圖中顯示它們,如下所示。

 @foreach (var item in Model) { 
      <tr> 
       <td> 
        @Html.DisplayFor(modelItem => item.Title) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.ReleaseDate) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.Genre) 
       </td> 
       <td> 
        @item.P 
       </td> 
       <td> 
        @Html.ActionLink("Edit", "Edit", new { id=item.ID }) | 
        @Html.ActionLink("Details", "Details", new { id=item.ID }) | 
        @Html.ActionLink("Delete", "Delete", new { id=item.ID }) 
       </td> 
      </tr> 
     } 
+0

會試試這謝謝!至少它仍然保留MVC – JJBG

+0

你好,你的答案會爲@ item.P產生相同的列值,其中每一行都有不同的光盤值。所以對我來說,真的需要執行另一個查詢該列中的每一行只有 – JJBG

+0

@JJBG在控制器端我們正在執行不同的查詢每個項目的權利?所以它必須有不同的價值。如果在控制器端 –

相關問題