[英]SPA Refresh page using routing, AngularJS
I have SPA, when I'm using routing and want to refresh a page I get 404 because it Client side routing. 我有SPA,当我使用路由并想要刷新页面时,我得到404,因为它是客户端路由。
How do I handle this? 我该如何处理?
Here is my routing:
app.config(function ($routeProvider, $locationProvider) {
$routeProvider
// route for the home page
.when('/', {
templateUrl: 'index.html'
})
.when('/category/gifts/', {
templateUrl: 'tpl/categories/category-gifts.html',
controller: 'giftsCtrl'
})
.when('/category/gifts/:id', {
templateUrl: 'tpl/categories/category-gifts.html',
controller: 'giftsCtrl'
})
.otherwise({ redirectTo: '/' });
$locationProvider.html5Mode(true);
});
For example: http://www.localhost After I enter into http://www.localhost/category/gifts/ and do CTRL + R or hit F5, I get 404, how should I take care about it? 例如: http://www.localhost在我进入http://www.localhost/category/gifts/并按CTRL + R或按F5后,我得到404,我应该如何处理它?
The problem commes from your MVC RouteConfig please update your RegisterRoutes (/app_Start/RouteConfig.cs like below to fix that: 来自你的MVC RouteConfig的问题请注意更新你的RegisterRoutes(/app_Start/RouteConfig.cs,如下所示,以解决这个问题:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Application",
url: "{*url}",
defaults: new { controller = "Home", action = "Index" });
}
}
or option B) if you don't have any controllers you can handle 404 error in your Global.asax just add Application_Error method to it. 或选项B)如果您没有任何控制器,您可以在Global.asax中处理404错误,只需向其添加Application_Error方法即可。
protected void Application_Error(Object sender, EventArgs e)
{
Exception ex = Server.GetLastError();
HttpException httpException = ex as HttpException;
if (ex != null)
{
int errorCode = httpException.GetHttpCode();
if (errorCode == 404)
{
Response.Redirect("~/");
}
}
}
Can you tried to put # between? 你能试着把#介入吗? Instead of: http://www.localhost/category/gifts/ you can put http://www.localhost/#/category/gifts/
而不是: http://www.localhost/category/gifts/你可以把http://www.localhost/#/category/gifts/
You can read about that: Removing the fragment identifier from AngularJS urls (# symbol) 您可以阅读: 从AngularJS网址中删除片段标识符(#符号)
I have also this problem before I try this solution in config file. 在配置文件中尝试此解决方案之前,我也有这个问题。
config file 配置文件
myapp.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {
// Specify the three simple routes ('/', '/About', and '/Contact')
$routeProvider.when('/', {
templateUrl: '/Home/Home',
controller: 'homeCtrl',
});
$routeProvider.when('/Login', {
templateUrl: '/account/Index',
controller: 'loginCtrl',
});
$routeProvider.when('/About', {
templateUrl: '/Home/About',
controller: 'aboutCtrl',
});
$routeProvider.when('/Contact', {
templateUrl: '/Home/Contact',
controller: 'contactCtrl'
});
$routeProvider.when('/First', {
templateUrl: '/account/First',
controller: 'firstCtrl'
});
$routeProvider.when('/Fullpage', {
templateUrl: '/Home/Fullpage',
controller: 'fullpageCtrl'
});
$routeProvider.otherwise({
redirectTo: '/'
});
// Specify HTML5 mode (using the History APIs) or HashBang syntax.
//$locationProvider.html5Mode({ enabled: true, requireBase: false });
$locationProvider.html5Mode(false);}]);
index.cshtml file index.cshtml文件
<a class="brand" href="#/">Simple Routing</a>
<div class="nav-collapse collapse">
<ul class="nav">
<li class="active"><a href="#/">Home</a></li>
<li><a href="/#/About">About</a></li>
<li><a href="/#/Contact">Contact</a></li>
<li><a href="/#/Login">Login</a></li>
<li><a href="/#/First">first</a></li>
<li><a href="/#/Fullpage">fullpage</a></li>
</ul>
</div><!--/.nav-collapse -->
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.