0

我一直在使用 ASP.NET,但我对带有 Razor 概念的 ASP.Net MVC 4 相当陌生。所以我的问题可能是基本的,但我感谢每一个帮助,因为我现在几天都找不到明确的答案(或者我正在寻找错误的东西)。问题是:如何在不使用索引方法的情况下访问视图中的控制器方法?

场景:

  • 我有一个存储一些值的数据库,如日期、价格等......(变量在 Model.

  • 我有一个设置视图索引的控制器

  • 我有一个视图显示 Indexpage 与我的数据库的值。

我想对价格列的所有值求和,但不想将结果存储在我的数据库中。据我了解,我通过控制器类中的方法访问数据库,并在我的视图中调用此方法。

为了逐步学习,我刚刚在控制器中定义了一个固定值,以查看如何在我的视图中显示该值。

编码:

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()在控制器的方法中定义它时才可见,或者我可以像我一样编写一个额外的方法并在我的视图中调用它?如果我 c&p ShowSumOfAllPrices()to的逻辑,它就可以工作Index()。但我认为我不需要在我的 index 方法中定义所有内容。如果是这样,这将是一个大而胖的方法。因此,据我所知,有 3 种可能的方法,但并非所有方法都“不错”甚至有效:

  1. 定义Index()方法中的所有内容。
  2. 定义其他方法,但在 Index 方法中调用它们,因为这是在我的视图中显示它而不使用模型的唯一方法,因为我不想将这些数据存储在我的数据库中
  3. 我可以定义其他方法并在我的视图中直接调用它们而无需新页面,但只有此方法的结果显示在当前索引页面的内容下。

我希望我的问题是可以理解的,并且这个问题不像我以前那样被问过。

4

1 回答 1

0

在 Index() 方法中定义所有内容。

控制器并不意味着保存逻辑。

定义其他方法,但在 Index 方法中调用它们,因为这是在我的视图中显示它而不使用模型的唯一方法,因为我不想将这些数据存储在我的数据库中

不要在控制器本身中定义其他方法。创建其他类,然后在Index()或任何合适的控制器方法中调用这些方法。如果你想在视图中显示数据,那么模型是最好的选择,但你甚至可以将数据存储在ViewBag

我可以定义其他方法并在我的视图中直接调用它们而无需新页面,但只有该方法的结果显示在当前索引页面的内容下。

如果您想在同一视图中获取方法的结果,则可能是这种情况[可能使用相同类型的 AJAX],但如果您想渲染其他页面,那么这可能是个坏主意。

您可以做的最好的事情是为您所需的功能声明一个类作为单一责任原则,然后使用该类在您想要结果的方法中执行该操作。您可以使用 AJAX 和 JQuery 访问控制器方法,只需谷歌一下,你会是你自己的。

希望这可以帮助。

于 2013-02-12T14:05:40.140 回答