2016-08-19 5 views
0

Мне нужно сделать собственный маршрут, но я столкнулся с проблемой. Это мой маршрутПроблемы с настраиваемыми маршрутами

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

И когда я иду к URL .../Profile/Edit/UserTest, например я получаю 404 Not Found ошибка, потому что мой параметр username является null. Мои действия выглядят так:

[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, как решить эту проблему (если это ваша проблема).

+0

Я не удаляю корень по умолчанию. –

+0

Вам не обязательно. Но поскольку вы не удаляете маршрут по умолчанию, причина, по которой ваш маршрут не работает, вероятно, потому, что по умолчанию выбирается вместо вашего. Ответ, на который я ссылаюсь, указывает, как использовать ваш маршрут, не удаляя маршрут по умолчанию. – Kolichikov

+0

Я видел ссылку, которую вы вложили в свой ответ, но когда я помещаю свой собственный маршрут до Default, ничего не происходит. :( –

0

В методе RegisterRoute из RouteConfig.cs файла в папке App_Start вашего проекта, где правило Маршрутизация по умолчанию написано там по умолчанию правило маршрута является: -ControllerName/ActionName/идентификатор

где идентификатор не является обязательным. для экс-

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 
); 

}

так что вы хотите, чтобы сделать его на заказ сделать имя пользователя = «» в правиле маршрутизации.

и в вашем ViewPage на использование события нажатия кнопки можно Jquery

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

});

где селектор означает идентификатор тега кнопки редактирования.

+0

Я получаю ошибку 400 Bad Request в консоли моего браузера –

Смежные вопросы