【问题标题】:ASP.Net MVC4 with Razor - Best and correct way to acces controler methods in views带有 Razor 的 ASP.Net MVC 4 - 在视图中访问控制器方法的最佳和正确方法
【发布时间】:2013-02-12 13:55:35
【问题描述】:

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

场景:

  • 我有一个存储一些值的数据库,例如日期、价格等...(变量在模型中定义。

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

  • 我有一个视图,它显示 Indexpage 以及我的数据库的值。

我想对价格列的所有值求和,但不想将结果存储在我的数据库中。 据我了解,我通过 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>

只要我没有在index()方法中定义ShowSumOfAllPrices()(在我的控制器类中)的方法内容就不会显示结果。

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

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

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

【问题讨论】:

  • 一个建议:您需要忘记的有关 Web 表单的所有知识。 MVC 是一种不同的思维方式。在 www.asp.net/mvc 上查看一些示例和教程

标签: razor asp.net-mvc-4


【解决方案1】:

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

控制器并不是用来保存逻辑的。

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

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

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

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

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多