2017-09-15 19 views
0

應用程序的默認網址是 http://servername/Root/ITProjectsMVC路由到不正確的URL的HTTP POST

有使用默認頁上的「團隊」菜單項,應重定向到另一個控制器指數將顯示一個下拉列表在以下網址

http://servername/Root/ITProjects/Team

它的正常工作爲止。

然而,當用戶在下拉列表中選擇一個項目,就應該到下面的網址 http://servername/Root/ITProjects/Team/Index?Id=7

但它引導到 http://servername/Team/Index?Id=7

,並拋出404錯誤。它在服務器名後缺少文件夾路徑「Root/ITProjects」。它的正常工作在本地主機上不存在的文件夾路徑,但未能就部署到測試或

[AuthorizeAD(Groups = "APP_xxxx_Users")] 
public class TeamController : Controller 
{ 
    public int pageSize = 5; 
    private IProjectService _projectService; 

    public TeamController(IProjectService projectService) 
    { 
     this._projectService = projectService; 
    } 
    public ActionResult Index(int? Id, int? page) 
    { 
     int pageNumber = (page ?? 1); 

     var viewModel = new TeamViewModel(); 
     if (Id != null) 
     { 
      viewModel.SelectedMember = (int)Id; 
      viewModel.Tasks = this._projectService.GetTasksByStaff(viewModel.SelectedMember).ToPagedList(pageNumber, pageSize);    
     } 
     return View(viewModel); 
    } 
    [HttpPost, ActionName("Index")] 
    public ActionResult IndexPost(int Id, int? page) 
    { 
    int pageNumber = (page ?? 1); 
    var viewModel = new TeamViewModel(); 
    viewModel.SelectedMember = Id; 
    if (ModelState.IsValid) 
    { 
     viewModel.Tasks = this._projectService.GetTasksByStaff(viewModel.SelectedMember).ToPagedList(pageNumber, pageSize); 
    } 
    return View(viewModel); 
    } 
} 

public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
     } 

爲索引視圖的一部分時,下拉列表項目被選中

@Html.DropDownListFor(m => m.SelectedMember, new SelectList(Model.StaffList, "UniqueId", "Initials", Model.SelectedMember), new { @class = "btn btn-default btn-color", onchange = @"form.action='/Team/Index?Id=' +this.value;form.submit();" }) 

回答

0

您的缺省路由控制器看起來督促服務器像這樣:

  routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 

您可以在網址前面添加/根/ ITProjects /更改默認的控制器路徑

1

您的MVC應用程序位於另一個應用程序的子目錄中,因此IIS會考慮父應用程序的根目錄而不是您的MVC應用程序的根目錄。

在IIS中,您需要將虛擬目錄轉換爲應用程序:選擇您的虛擬目錄並選擇「轉換爲應用程序」。如果您無法做到這一點,那麼您需要在routes.config中修改路由以考慮虛擬目錄:

routes.MapRoute(
    "Default", // Route name 
    "Root/ITProjects/{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 
+0

我沒有將虛擬目錄轉換爲應用程序。正如我在文章中提到的(剛剛更新),默認情況下沒有問題,並重定向到其他控制器索引方法。只有當其他控制器發出http信息時纔會失敗。當我確實將route.config更改爲Root/ITProjects/....時,它將在所有頁面上拋出404錯誤 – ChinnaR

+0

您的窗體在視圖中的外觀如何?更具體地說,你如何在表單中構建POST URL?最後,在Dev Tools中查看呈現的表單 - 什麼是發佈URL? – viperguynaz

+0

我已在帖子底部的索引視圖中發佈了dropdownlistfor。根據選定的項目,我正在致電onchange事件。 – ChinnaR