2013-08-06 18 views
5

Tôi đã một ứng dụng MVC triển khai trong máy chủ của tôi trong một thư mục ảo như:ASP NET MVC RedirectoToAction bỏ qua các ứng dụng, nơi tọa lạc

http://localhost/myapp/ 

đâu "myapp" là thư mục ảo

Trong tôi xem đăng nhập, nằm ở

"http://localhost/myapp/user/login", 

tôi chuyển hướng đến chỉ số sử dụng RedirectToAction("Index", "Home"), có vẻ như các ứng dụng cố gắng chuyển hướng đến

"http://localhost/home/index" 

thay vì

"http://localhost/myapp/home/index". 

Ứng dụng này hoạt động khi nó nằm trong thư mục gốc của trang web IIS nhưng không hoạt động trong tình huống cụ thể.

Có cách nào để định cấu hình gốc ứng dụng, mà tôi đã bỏ lỡ không?

Cài đặt: Microsoft Visual Studio Express 2012 cho Web, IIS 7 trong Windows 7, ứng dụng ASP .NET v4.0

+1

Bạn đã đặt thư mục ảo của mình thành ứng dụng chưa? – Brandon

Trả lời

2

Tôi 99% tích cực mà thực hiện:

return RedirectToAction("Index", "Home") 

là ứng dụng gốc tương đối có nghĩa là nó sẽ chuyển hướng đến ứng dụng bạn đang ở bất kể cài đặt thư mục ảo hoặc ở đâu e ứng dụng được đặt. Tôi có nghĩa là suy nghĩ của cơn ác mộng nếu không mỗi khi bạn di chuyển các ứng dụng vào một thư mục ảo khác nhau, bạn cần phải cập nhật tập tin global.asax hoặc web.config ??? Nực cười! Chúng tôi có cùng một thiết lập mà bạn có và chúng tôi không có vấn đề với "nhảy ứng dụng".

Bạn có chắc chắn rằng RedirectToAction đang gây ra điều này không? Nó có thể được rằng bạn có một cái gì đó như:

@Url.Content("/Home/Index") 

Trong trường hợp đó bạn sẽ gặp vấn đề này và bạn có thể dễ dàng khắc phục điều này bằng cách thực hiện:

@Url.Content("~/Home/Index") 

~ biểu tượng làm cho nó gốc ứng dụng tương đối ...

+0

Tôi không chắc chắn nếu điều này là chính xác, không thử nghiệm nó bản thân mình, nhưng nó có ý nghĩa! +1 – Liam

+0

Cảm ơn bạn đã trả lời, đó là một sai lầm trong mã xem – Silvano

+1

Phải là 'return RedirectToAction (" Index "," Home ")' – Simon

0

đó là chức năng chính xác. MVC sẽ tính toán tuyến đường như bộ điều khiển/hành động theo mặc định.

Nếu bạn muốn điều này để làm nếu không bạn cần phải thêm một tuyến đường vào Global.asax:

//this is your new route which needs to be ABOVE the detault 
routes.MapRoute(
// Route name 
"myapp_Default", 
// Url with parameters 
"myapp/{controller}/{action}/{id}", 
// Parameter defaults 
new { action = "index", id = UrlParameter.Optional }); 


//This is the default route that should already be there. 
routes.MapRoute(
// Route name 
"Default", 
// Url with parameters 
"{controller}/{action}/{id}", 
// Parameter defaults 
new { action = "index", id = UrlParameter.Optional }); 

biết thêm về định tuyến trong scott gu của blog

Các vấn đề liên quan