我一直在使用ASP.NET,但我对使用Razor概念的ASP.Net MVC 4相当新。所以我的问题可能是基本的,但我很感激每一个帮助,因为我现在几乎找不到一个明确的答案(或者我正在寻找错误的东西)。问题是:如何在不使用索引方法的情况下访问视图中的Controller方法?
情景:
我有一个存储日期,价格等值的数据库......(变量在模型中定义。
我有一个设置视图索引的控制器
我的视图显示了包含我的数据库值的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>
只要我没有在ShowSumOfAllPrices()
方法中定义index()
(在我的控制器类中)的方法内容,结果就不会显示。
问题是:如果我在控制器中的Index()
方法中定义了一个方法,那么视图中的方法的结果是否只有可见,或者我可以像我一样编写一个额外的方法并在我的视图中调用它吗?如果我将ShowSumOfAllPrices()
的逻辑与Index()
联系起来,它就会起作用。但我认为我不需要在索引方法中定义所有内容。如果是这样,那将是一个庞大而肥胖的方法。因此,据我所知,有三种可能的方式,但并非所有方式都可能“好”甚至有效:
Index()
方法中定义所有内容。我希望我的问题是可以理解的,这个问题之前没有像我这样被问过。
答案 0 :(得分:0)
在Index()方法中定义所有内容。
控制器并不意味着掌握逻辑。
定义其他方法,但在Index方法中调用它们,因为它是在我的视图中显示它而不使用模型的唯一方法,因为我不想将这些数据存储在我的数据库中
不要在控制器本身中定义其他方法。创建其他类,然后在Index()
或任何合适的控制器方法中调用这些方法。如果您想在视图中显示数据,那么模型是最佳选择,但您甚至可以将数据存储在ViewBag
我可以定义其他方法,并在我的视图中直接调用它们,而不需要新页面,但只有当前索引页面内容下显示的此方法的结果。
如果你想在同一个视图中获取方法的结果,那么可能是[可能使用相同类型的AJAX],但如果你想渲染其他页面,那么这可能是一个坏主意。 / p>
你可以做的最好的事情是将所需函数的类声明为单一责任原则,然后使用该类在你想要获得结果的方法中执行该操作。你可以使用AJAX和JQuery访问控制器方法,只需稍微谷歌,你将成为自己的。
希望这有帮助。