我创建了一个ASP.NET MVC应用程序,在创建它之后,当我尝试编辑一个条目时,我遇到了麻烦;编辑已经在数据库中的值工作正常,但是当我尝试编辑我创建的条目时,它给了我这个错误:
2>'/'应用程序中的服务器错误。无法找到资源。 说明: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;
}
答案 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() })