2017-09-15 19 views
0

アプリケーションのデフォルトのURLは http://servername/Root/ITProjectsMVCルーティングは

は、ドロップダウンリストが表示されます指標で別のコントローラにリダイレクトする必要があり、デフォルトのページの「チーム」でメニュー項目がありますです以下のURL

http://servername/Root/ITProjects/Team

では、これまで正常に動作しています。ユーザーがドロップダウンリスト内の項目を選択したときに

しかし、それは http://servername/Root/ITProjects/Team/Index?Id=7

以下のURLに行く必要があります。しかし、それは http://servername/Team/Index?Id=7

に向け、404エラーを投げています。これは、サーバー名の後にフォルダーパス 'Root/ITProjects'がありません。それには、フォルダのパスが存在しないローカルホスト上で正常に動作しますがドロップダウンリストの項目は、コントローラのルックスのために

@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

あなたのデフォルトルートを選択する

Indexビューの一環として
[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 } 
      ); 
     } 

テストするための展開やPRODサーバ上で失敗していますこのように:あなたはURLの前に/ /ルート/ ITProjectsを追加することができます

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

デフォルトのコントローラのパスを変更するには

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