ASP.NETMVC4和Razor-在视图中访问控件方法的最佳正确方法

ASP.NETMVC4和Razor-在视图中访问控件方法的最佳正确方法,razor,asp.net-mvc-4,Razor,Asp.net Mvc 4,我一直在使用ASP.NET,但我对使用Razor概念的ASP.NETMVC4还相当陌生。因此,我的问题可能是基本的,但我感谢大家的帮助,因为我已经好几天没有找到确切的答案了(或者我正在寻找错误的答案)。问题是:如何在不使用索引方法的情况下访问视图中的控制器方法 情景: 我有一个数据库,存储一些值,如日期,价格等。。。(变量在模型中定义 我有一个设置视图索引的控制器 我有一个视图,它用我的数据库的值显示InExpage 我想对价格列的所有值求和,但不想将结果存储在数据库中。 据我所知,我通过控

我一直在使用ASP.NET,但我对使用Razor概念的ASP.NETMVC4还相当陌生。因此,我的问题可能是基本的,但我感谢大家的帮助,因为我已经好几天没有找到确切的答案了(或者我正在寻找错误的答案)。问题是:如何在不使用索引方法的情况下访问视图中的控制器方法

情景:

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

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

  • 我有一个视图,它用我的数据库的值显示InExpage

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

为了一步一步地学习,我在控制器中定义了一个固定值,以了解如何在视图中显示该值

守则:

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>
模型:
[射程(1100)]
[数据类型(数据类型.货币)]
公共十进制价格{get;set;}//条目的金额
控制器:
公共行动结果索引()
{
返回视图(db.Amounts.ToList());
}
公共行动结果显示总体价格()
{
//尚未调用用于测试的数据库。必须定义查询并将结果写入此方法中的变量
ViewBag.Price=2;
返回视图();
}
视图:
@*通过控制器显示sumprize(首先是测试结果)的测试方法*@
你好@ViewBag.Price
只要我没有在
index()
方法中定义
ShowSumOfAllPrices()
(在我的控制器类中)的方法内容,就不会显示结果

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

  • Index()
    方法中定义所有内容
  • 定义其他方法,但在Index方法中调用它们,因为这是在我的视图中显示它的唯一方法,而不使用模型,因为我不想在数据库中存储这些数据
  • 我可以定义其他方法并在视图中直接调用它们,而无需创建新页面,但只能在currend索引页面的内容下显示此方法的结果
  • 我希望我的问题是可以理解的,这个问题不像我以前问的那样

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

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

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

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

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

    如果您希望在同一视图中获取方法的结果,则可能会出现这种情况[可能使用相同类型的AJAX],但如果您希望呈现其他页面,则这可能是一个坏主意

    最好的方法是为所需函数声明一个类作为单一责任原则,然后使用该类在您希望得到结果的方法中执行该操作。您可以使用AJAX和JQuery访问控制器方法,只需用谷歌搜索一下,您就可以拥有自己的方法


    希望这能有所帮助。

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