C# ASP.NET MVC:如何从控制器中查找视图?

C# ASP.NET MVC:如何从控制器中查找视图?,c#,asp.net-mvc,C#,Asp.net Mvc,我对网络编程几乎一无所知 我被要求向使用ASP.NET MVC的现有系统添加日志语句。我不知道系统。其他人开发了它 我已将日志语句添加到控制器。我想测试日志语句,但我不知道如何访问调用控制器方法的视图 也就是说,我认为如果我知道哪些视图调用什么,那么我可以在运行网站时导航到这些视图,从而测试日志记录。 通常在VisualStudio中,它会在方法上方提供带有引用的intellisense行,但在本例中不会。我想这是网络编程的“魔力”,呵呵 那么,我如何找出哪个视图调用哪个控制器方法呢?事实上,反

我对网络编程几乎一无所知

我被要求向使用ASP.NET MVC的现有系统添加日志语句。我不知道系统。其他人开发了它

我已将日志语句添加到控制器。我想测试日志语句,但我不知道如何访问调用控制器方法的视图

也就是说,我认为如果我知道哪些视图调用什么,那么我可以在运行网站时导航到这些视图,从而测试日志记录。 通常在VisualStudio中,它会在方法上方提供带有引用的intellisense行,但在本例中不会。我想这是网络编程的“魔力”,呵呵


那么,我如何找出哪个视图调用哪个控制器方法呢?

事实上,反过来说,视图是由控制器渲染的

如果从浏览器发送请求(如GET),MVC将首先查询其注册的路由,以确定该请求应路由到哪个控制器和操作方法。看见 路由在
registerOutes
方法中的
Global.asax.cs
中设置

通常存在如下默认设置:
“{controller}/{action}/{id}”

这意味着如果您浏览到
http://myserver/Accounts/Edit/3
,此请求将被路由到
AccountsController.cs
,在那里它将点击
编辑(长id)
操作方法并将
3
作为
id
传递

另一方面,如果您在
CustomersController.cs
中的
Delete(long id)
操作中添加了日志语句,则您可能可以通过调用
http://myserver/Customers/Delete/1337

需要注意的是动作方法上方的
[HttpPost]
[HttpDelete]
注释。这些定义了实现此操作所需的HTTP谓词。您无法通过发送
GET
请求来实现
[HttpPost]
操作

在操作方法的末尾,您可能会发现一行,如
returnview(“Edit”,viewModel)。这将告诉MVC使用哪个CSHTML视图文件进行渲染。CSHTML文件的路径将按照约定进行查找,MVC将查找的第一个位置是
Views\{controllerName}\Edit.CSHTML
。但是如果设置了区域,它将首先查找
{areaName}\Views\{controllerName}\Edit.cshtml


您可以在代码库中搜索的另一项内容是调用
@Html.RenderAction
@Url.Action
,它们用于从视图中调用操作。它们还将
controllerName
actionName
作为参数,例如
@Url。Action(“Accounts”,“Edit”,new{id=3})
将呈现类似
http://myserver/Accounts/Edit/3

控制器上操作的名称与视图的名称(按约定)匹配。例如,可以在
~/Views/Log/Index.cshtml
上找到
LogController
上的
Index
操作。这是投入一些时间学习MVC基础知识的好时机,Shelby是正确的,除非该操作返回与操作名称不同的视图(“视图名称”)。这对我非常有用。谢谢!:-)