[英]ASP.NET Core 2.0 URLs
我正在开发一个大型 ASP.NET Core 2 Web 应用程序,但我仍然对 URL 感到困惑。
刚开始学习时,我以为 URL 取的是 View 的名称,但发现它们来自 Controller 方法。
这是一个传达我的问题的示例:
我有一个名为Daysheet的控制器方法,它返回一个具有相同名称的视图和模型。
在 Daysheet 视图中,我从 Javascript 调用各种控制器方法来执行特定操作。 其中之一称为AssignStaff ,它采用两个整数参数。
在 AssignStaff 方法中,我再次返回带有模型的 Daysheet 视图,但现在我的 URL 是“AssignStaff”!
我不能只进行重定向,因为整个 Daysheet 模型没有传递给 AssignStaff 方法。
我有很多这样的情况,在调用操作后,我最终得到另一个我不想要的 URL。
更新/编辑
如果我的解释令人困惑,感谢您的帮助和道歉。 我只是有一个名为Daysheet的视图,它使用了一个模型。 我想调用各种控制器方法来执行各种操作,但我想留在“Daysheet”视图/URL 上。
如前所述,我不能只是重定向,因为在操作方法中,我不再拥有Daysheet视图中的整个模型。 另外,如果我重定向,我将无法传递整个模型,因为这会导致错误,指出标题太长。 我认为我唯一的选择可能是使用 ajax 进行操作,这样 URL 就不会改变。
当您只在控制器操作中执行 Return View("") name 时,URL 将是您正在使用的操作的名称。
如果您想重定向到某个特定的操作,这将有助于确保 Url 与您所在的位置匹配。 您可能想在此处阅读更多相关信息。
为此,请使用:
RedirectToAction()
您的应用程序响应的 URL 称为“路由”,它们要么是按约定创建的,要么是明确创建的。 当然,默认是按照惯例,它是/{controller=Home}/{action=Index}
形式的 URL。 如果路由的那部分被保留, Index
是默认操作,因此对/foo
的请求将按照约定映射到FooController.Index
。 HomeController
是默认控制器,因此按照惯例,空路径(例如http://sample.com )将调用HomeController.Index
。
Razor Pages 有自己的约定。 这些确实遵循文件系统,但不包括路径的Pages
部分。 因此,像Pages/Foo/MyRazorPage.cshtml
这样的 Razor 页面将在/Foo/MyRazorPage
下/Foo/MyRazorPage
。
有Route
属性,它允许您指定一个完全自定义的路由。 此属性可以应用于控制器类和类中的单个操作。 例如:
[Route("foo")]
public class MyAwesomeController
{
[Route("bar")]
public IActionResult MyAwesomeAction()
{
return View();
}
}
这样,对/foo/bar
的请求实际上会调用MyAwesomeController.MyAwesomeAction
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.