ASP.NETMVC4和Razor-在视图中访问控件方法的最佳正确方法
我一直在使用ASP.NET,但我对使用Razor概念的ASP.NETMVC4还相当陌生。因此,我的问题可能是基本的,但我感谢大家的帮助,因为我已经好几天没有找到确切的答案了(或者我正在寻找错误的答案)。问题是:如何在不使用索引方法的情况下访问视图中的控制器方法 情景:ASP.NETMVC4和Razor-在视图中访问控件方法的最佳正确方法,razor,asp.net-mvc-4,Razor,Asp.net Mvc 4,我一直在使用ASP.NET,但我对使用Razor概念的ASP.NETMVC4还相当陌生。因此,我的问题可能是基本的,但我感谢大家的帮助,因为我已经好几天没有找到确切的答案了(或者我正在寻找错误的答案)。问题是:如何在不使用索引方法的情况下访问视图中的控制器方法 情景: 我有一个数据库,存储一些值,如日期,价格等。。。(变量在模型中定义 我有一个设置视图索引的控制器 我有一个视图,它用我的数据库的值显示InExpage 我想对价格列的所有值求和,但不想将结果存储在数据库中。 据我所知,我通过控
- 我有一个数据库,存储一些值,如日期,价格等。。。(变量在模型中定义
- 我有一个设置视图索引的控制器
- 我有一个视图,它用我的数据库的值显示InExpage
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()
或任何合适的控制器方法中调用这些方法。如果要在视图中显示数据,则模型是最佳选择,但您甚至可以将数据存储在视图包中
我可以定义其他方法并在视图中直接调用它们,而无需创建新页面,但只能在当前索引页面的内容下显示此方法的结果
如果您希望在同一视图中获取方法的结果,则可能会出现这种情况[可能使用相同类型的AJAX],但如果您希望呈现其他页面,则这可能是一个坏主意
最好的方法是为所需函数声明一个类作为单一责任原则,然后使用该类在您希望得到结果的方法中执行该操作。您可以使用AJAX和JQuery访问控制器方法,只需用谷歌搜索一下,您就可以拥有自己的方法
希望这能有所帮助。一个建议:你需要忘记所有关于Web表单的知识。MVC是一种不同的思维方式。请查看www.asp.net/MVC上的一些示例和教程