2013-02-12 29 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,只需将它稍微调出来,你就可以成为你自己的了。

希望这会有所帮助。