我正在开发一个大型ASP.NET Core 2 Web应用程序,但是我仍然对URL感到困惑。
拳头学习时,我以为URL是View的名字,但发现它们来自Controller方法。
以下是传达我的问题的示例:
我有一个名为 Daysheet 的控制器方法,该方法返回具有相同名称的视图和模型。
在“工作表”视图中,我从Javascript调用了各种控制器方法来执行特定操作。其中之一称为 AssignStaff ,它带有两个整数参数。
在AssignStaff方法中,我再次返回带有模型的Daysheet视图,但是现在我的URL是“ AssignStaff”!
我不能仅仅进行重定向,因为整个Daysheet模型没有传递给AssignStaff方法。
在很多情况下,调用一个动作后,我会得到另一个我不想要的URL。
更新/编辑
如果我的解释令人困惑,谢谢您的帮助和歉意。我只是有一个使用模型的名为 Daysheet 的视图。我想调用各种控制器方法来执行各种操作,但是我希望停留在“日程表”视图/ URL中。
如上所述,我不能只是重定向,因为在操作方法中,我不再从 Daysheet 视图获得整个模型。另外,如果我重定向,则无法传递整个模型,因为这会导致报头过长的错误。我认为我唯一的选择可能是使用ajax进行操作,以使URL不变。
答案 0 :(得分:3)
当您仅在Controller Action中返回Return View(“”)名称时,URL将是您正在使用的Action的名称。
如果您想重定向到某些特定的操作,这将有助于确保Url与您所在的位置匹配。您可能想详细了解here。
为此,请使用:
RedirectToAction()
答案 1 :(得分:0)
您的应用程序响应的URL被称为“路由”,它们是按照惯例创建的或是明确创建的。当然,默认是约定,它是/{controller=Home}/{action=Index}
形式的URL。如果忽略路由的那部分,则Index
是默认操作,因此对/foo
的请求将按照惯例映射到FooController.Index
。 HomeController
是默认控制器,因此按照惯例,空路径(例如http://sample.com)将调用HomeController.Index
。
Razor Pages有其自己的约定。它们确实遵循文件系统,但是排除了路径的Pages
部分。因此,像Pages/Foo/MyRazorPage.cshtml
这样的Razor Page将在/Foo/MyRazorPage
下加载。
有一个Route
属性,它允许您指定完全自定义的路由。该属性可以应用于控制器类以及该类中的各个动作。例如:
[Route("foo")]
public class MyAwesomeController
{
[Route("bar")]
public IActionResult MyAwesomeAction()
{
return View();
}
}
这样,对/foo/bar
的请求实际上将调用MyAwesomeController.MyAwesomeAction
。