2016-08-19 2 views
0

カスタムルートを作成する必要がありますが、問題が残っています。 私のルートカスタムルートの問題

routes.MapRoute(
      name: "IndexByUserName", 
      url: "{controller}/{action}/{username}", 
      defaults: new { controller = "Profile", action = "Edit", username = UrlParameter.Optional } 
     ); 

であると私には、例えば、URL .../Profile/Edit/UserTestに行くとき、私のパラメータusernamenullあるので、私は、404 Not Foundエラーを取得します。私の行動は次のようになります

[Authorize] 
    [HttpGet] 
    public ActionResult Edit(string username) 
    { 

     ApplicationUser profile = db.Users.Find(username); 
     if (profile == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(profile); 
    } 

    [Authorize] 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit([Bind(Include = "Id, Nickname, FirstName, LastName, SecondName, City, Address, Description, Skype, TelephoneNum")] ApplicationUser profile) 
    { 
     if (ModelState.IsValid) 
     { 
      var user = db.Users.Find(profile.Id); 
      if (user == null) 
      { 
       return HttpNotFound(); 
      } 
      user.UserName = User.Identity.GetUserName(); 
      user.FirstName = profile.FirstName; 
      user.SecondName = profile.SecondName; 
      user.LastName = profile.LastName; 
      user.SocialNetworks = profile.SocialNetworks; 
      user.Address = profile.Address; 
      user.City = profile.City; 
      user.TelephoneNum = profile.TelephoneNum; 
      user.Description = profile.Description; 
      db.Entry(user).State = EntityState.Modified; 
      db.SaveChanges(); 
      return Redirect("/Profile/Index/" + User.Identity.Name); 
     } 
     return View(profile); 
    } 

私はどこに問題があるのか​​分かりません。

答えて

1

デフォルトルートを削除しましたか?あなたのルートは同じデフォルトの特異性を持つように見えるので、デフォルトルートが最初に現れた場合、アプリケーションはそのルートを使用します。

この問題の解決方法については、this answer(問題がある場合)を参照してください。 idはオプションです-ControllerName/ACTIONNAME/ID

:デフォルトのルーティングルールはデフォルトルートルールがあるが書かれているプロジェクトのApp_Startフォルダ内RouteConfig.csファイルのRegisterRoute方法で

+0

私はデフォルトルートを削除しません。 –

+0

あなたはそうする必要はありません。しかし、デフォルトルートを削除していないので、ルートが機能していない理由はおそらくデフォルトがあなたのものの代わりに選択されているためです。私がリンクした答えは、デフォルト経路を削除せずに経路を使用する方法を指定しています。 – Kolichikov

+0

私はあなたの答えに入れたリンクを見ましたが、私がデフォルトルートの前に私のカスタムルートを置いたときには、何のことも起こりません。 : –

0

。 EX-

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

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

}

ため ので、あなたのルーティングルールに "" =それはカスタムユーザー名を作るようにしたいです。

とボタンのクリックイベントの使用上のごビューページに

$("#Selector").click(function(response){ 
$.get("@Url.Action("ControllerName","ActionName)",{userName:"Name of User"}) 

を} jQueryのことができます)。

ここで、selectorは、EditボタンタグのIdを意味します。

+0

私のブラウザのコンソールに400の不正な要求エラーが表示されますが、このエラーメッセージは表示されません。 –

関連する問題