我想我并不完全理解url如何使用C#项目,因为我不知道如何指定一个url来通过控制器而不只是返回一个aspx页面。
假设我试图通过名为“ScholarshipController.cs”的Controller进入我的项目的索引页面。我想在这个控制器中点击Index方法/动作,我的网址如下(我的应用名称是“TuitionAssistance”fyi):
http://localhost/TuitionAssistance/Scholarship/Index
但是,运行此URL只会返回位于“Scholarship”视图文件中名为“Index.aspx”的aspx页面,而不会触及Controller。为什么会发生这种情况,如何让它通过控制器,以便索引页面在加载时会将相应的信息加载到它上面?
对不起,如果这是一个愚蠢的问题。任何见解将不胜感激。谢谢!
Route.config:
using System.Web.Mvc;
using System.Web.Routing;
namespace ScholarshipTuitionAssistance
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
/* Scholarship */
/* Scholarship */
//routes.MapRoute("TuitionAssistance",
// "tuition/{name}",
// new { controller = "TuitionAssistance", action = "Index", name = "" });
routes.MapRoute(
name: "TuitionAssistance",
url: "{controller}/{action}/{employee_number}",
defaults: new { controller = "Home", action = "TuitionAssistance", employee_number = UrlParameter.Optional }
);
routes.MapRoute(
name: "Scholarship",
url: "{controller}/{action}/{employee_number}",
defaults: new { controller = "Home", action = "Scholarship", employee_number = UrlParameter.Optional }
);
routes.MapRoute(
name: "Details",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Scholarship", action = "Details", id = UrlParameter.Optional }
);
}
}
}
答案 0 :(得分:3)
您的路由(URL)无法匹配文件系统上实际存在的任何内容。在您的示例中,您显然有一个文件[document root]\Scholarship\Index.aspx
。因此,对Scholarship/Index
的请求将返回该文件,而不是调用ASP.NET MVC机制来加载控制器操作。
答案 1 :(得分:1)
在MVC ASP.NET中,将这些类型的链接视为在控制器中调用方法的方法。当访问该链接时,您的控制器会执行一堆垃圾,然后返回ActionResult(或其他内容)。出于解释的缘故,此ActionResult是在相应的视图文件中写入的标记。 Controller - > index()将在视图下返回名为index的视图 - >控制器。如果要将信息传递给视图,则会将包含其中所有信息的模型传递给索引控制器的视图(返回视图(MyFancyModel))。该视图顶部有一条剃刀线,例如:@model The.Namespace.Wherever.my.model.is
Visual Studio中的脚手架控制器和视图专门用于索引页面,只传递相应数据库中的项目列表。