/ Application中的服务器错误。找不到资源

时间:2011-03-10 13:49:40

标签: asp.net-mvc-2

我创建了一个ASP.NET MVC应用程序,在创建它之后,当我尝试编辑一个条目时,我遇到了麻烦;编辑已经在数据库中的值工作正常,但是当我尝试编辑我创建的条目时,它给了我这个错误:

'/'应用程序中的服务器错误。

无法找到资源。 说明:HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,确保拼写正确。

以下是我的控制器编辑和创建操作方法:

  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 个答案:

答案 0 :(得分:2)

问题解决了!在Global.asax中,路由实现如下:

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

问题是ID在数据库中定义为nchar(5)。当我在数据库中创建一个新条目时,它应该有一个CustomerID字段为5个字符。如果不是(少于5个字符),则结果URL对于CustomerID字段中的每个缺少的字符都将具有%20字符,从而生成“服务器错误...”。

因此,最好使用int ID,避免不必要的问题。

答案 1 :(得分:0)

要删除每个缺少字符的%20字符,只需将 .Trim()添加到视图中的路由值:

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

@Html.ActionLink("Edit", "Edit", new { id = item.TheIdValue.Trim() })