Ошибка сервера в приложении.Ресурс не найден - PullRequest
0 голосов
/ 10 марта 2011

Я создал приложение ASP.NET MVC, и у меня возникают проблемы при попытке отредактировать запись после ее создания;редактирование значений уже в базе данных работает нормально, но когда я пытаюсь отредактировать созданную мной запись, она выдает мне эту ошибку:

Ошибка сервера в приложении '/'.

Ресурс не можетбыть найденным.Описание: HTTP 404. Ресурс, который вы ищете (или одна из его зависимостей), мог быть удален, изменилось его имя или временно недоступен.Пожалуйста, просмотрите следующий URL и убедитесь, что он написан правильно.

Вот мой контроллер Способы редактирования и создания действий:

  public ActionResult Create()
        {           
            return View();
        } 

        //
        // POST: /Customer/Create

        [HttpPost]
        public ActionResult Create(Customer cs, bool Ontario, bool IN, bool MA)
        {
            try
            {

                ViewData["Ontario"] = Ontario;
                ViewData["IN"] = IN;
                ViewData["MA"] = MA;

                northwndEntities nw = new northwndEntities();

                if (ViewData["Ontario"].Equals(true))
                {
                    cs.Region = "Ontario";
                }
                else
                    if (ViewData["IN"].Equals(true))
                        cs.Region = "Indianapolis";
                    else
                        if (ViewData["MA"].Equals(true))
                            cs.Region = "Massachussets";
                nw.Customers.AddObject(cs);
                nw.SaveChanges();


                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        } 

 public ActionResult Edit(string id)
        {

            return View(GetCustomer(id));
        }

        //
        // POST: /Customer/Edit/5

        [HttpPost]
        public ActionResult Edit(Customer cust, bool ontario, bool IN, bool MA)
        {
            try
            {               
                ViewData["Ontario"] = ontario;
                ViewData["IN"] = IN;
                ViewData["MA"] = MA;

                northwndEntities nw = new northwndEntities();

                if (ViewData["Ontario"].Equals(true))
                {
                    cust.Region = "Ontario";
                }
                else
                    if (ViewData["IN"].Equals(true))
                        cust.Region = "Indianapolis";
                    else
                        if (ViewData["MA"].Equals(true))
                            cust.Region = "Massachussets";

                Customer origCust = GetCustomer(cust.CustomerID);
                nw.Customers.Attach(cust);
                nw.ApplyOriginalValues("Customers", origCust);
                nw.SaveChanges();
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

 [NonAction]
        public Customer GetCustomer(string id)
        {
            northwndEntities nw = new northwndEntities();

            var cust = from c in nw.Customers
                       where c.CustomerID == id
                       select c;
            Customer customer = cust.FirstOrDefault();

            return customer;

        }

Ответы [ 2 ]

2 голосов
/ 11 марта 2011

Проблема решена!В Global.asax маршрутизация реализована следующим образом:

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

Проблема заключалась в том, что идентификатор определен в базе данных как nchar (5).Когда я создал новую запись в базе данных, в поле CustomerID должно было быть ровно 5 символов.Если нет (менее 5 символов), результирующий URL будет иметь символ% 20 для каждого отсутствующего символа в поле CustomerID, и, таким образом, будет сгенерировано «Ошибка сервера ...».

Так что лучше используйте int ID, вы избежите ненужных проблем.

0 голосов
/ 09 ноября 2017

Чтобы избавиться от символа% 20 для каждого отсутствующего символа, просто добавьте .Trim () к значению маршрута в представлении:

@Url.Action("Edit", new { id=item.TheIdValue.Trim() }

или

@Html.ActionLink("Edit", "Edit", new { id = item.TheIdValue.Trim() })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...