2013-02-12 64 views
0

我一直在使用ASP.NET,但我對帶有Razor概念的ASP.Net MVC 4相當陌生。所以我的問題可能是基本的,但我感謝每一個幫助,因爲我現在無法真正找到一個確定的答案(或者我正在尋找錯誤的東西)。問題是:如何在不使用索引方法的情況下訪問我的視圖中的Controller方法?帶剃刀的ASP.Net MVC4 - 訪問視圖中控制器方法的最佳正確方法

場景:

  • 我有一個存儲,如日期,價格等一些值的數據庫...(變量模型中定義

  • 我有一個控制器,這就是設置一個視點索引

  • 我有一個視圖,顯示Indexpage與我的數據的基礎上的值。

我想總結價格colum的所有值,但不想將結果存儲在我的數據庫中。 在我的理解中,我通過我的Controller類中的Method訪問數據庫,並在我的視圖中調用此方法。

要逐步學習,我只是在控制器中定義了一個固定值,以瞭解如何在我的視圖中顯示此值。

的代碼:

Model: 

[Range(1, 100)] 
[DataType(DataType.Currency)] 
public decimal Price { get; set; } // Amount of an entry 

Controller: 

    public ActionResult Index() 
     { 
      return View(db.Amounts.ToList()); 
     } 

     public ActionResult ShowSumOfAllPrices() 
     { 

      //For testing db is not called yet. Query must be defined and result written to a variable within this mehod 
      ViewBag.Price = 2; 

      return View(); 
     } 

View: 

@*testmethod for displaying sumprize (first just wit test result) via controler*@ 


    <table> 
    <tr> 
     <td>hallo @ViewBag.Price</td> 
    </tr> 
    </table> 

結果沒有限制,只要我沒有定義的ShowSumOfAllPrices()index()方法,所述方法的內容(在我的控制器類)中所示。

問題是:是否只有在我的控制器中的Index()方法中定義該方法時,視圖中的某個方法的結果纔可見,還是可以像我一樣編寫額外的方法並在我的視圖中調用它?它正在工作,如果我的ShowSumOfAllPrices()Index()的邏輯c & p。但我不認爲我需要在我的索引方法中定義所有內容。如果是這樣,這將是一個大而肥的方法。所以,據我看到有3種可能的方式,但不是所有的可能是「好」,甚至工作:

  1. 定義在Index()方法的一切。
  2. 定義其他方法,但是稱他們在指數方法,因爲它是我的看法中顯示它的唯一途徑,而不是使用模型,因爲我不希望將這些數據存儲在我的數據庫
  3. 我可以定義其他的方法和直接在我的視圖中調用它們而沒有新的頁面,但僅在currend索引頁的內容下顯示此方法的結果。

我希望我的問題是可以理解的,這個問題並沒有像我以前那樣問過。

+0

一個建議:你知道關於Web窗體的一切,你需要忘記它。 MVC是一種不同的思維方式。查看www.asp.net/mvc上的一些示例和教程 – 2013-06-25 20:27:42

回答

0

定義Index()方法中的所有內容。

控制器並不是要保存邏輯。

定義其他方法,但是稱他們在指數方法,因爲它是我的看法中顯示它的唯一途徑,而不是使用模型,因爲我不希望將這些數據存儲在我的數據庫

不要在控制器本身中定義其他方法。製作其他課程,然後在Index()或任何合適的控制器方法中調用這些方法。如果你想在視圖中顯示的數據,那麼模型是最好的選擇,但你甚至可以將數據存儲在ViewBag

我可以定義其他方法,直接打電話給他們,我認爲無需新頁面,但只顯示在當前索引頁面內容下顯示的此方法的結果。

如果你想獲取的同一視圖的方法的結果,那麼這可能是這種情況[可能會使用同一種AJAX的],但如果你想渲染其他頁面,那麼這可能是一個壞理念。

最好的事情,你能做的就是聲明一個類爲您所需的功能單一職責原則,然後使用類做的方法操作,你想有結果in.You可以訪問的控制方法使用AJAX和JQuery,只需將它稍微調出來,你就可以成爲你自己的了。

希望這會有所幫助。