【发布时间】:2013-12-25 07:31:50
【问题描述】:
我在自定义路线上使用约束时遇到了困难。 以下是我的类RouteConfig.cs
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "produtos",
url: "produtos/{action}/{id}",
defaults: new { controller = "Produto", action = "Listar", id = UrlParameter.Optional },
constraints: new { id = @"\d+" }
);
routes.MapRoute(
name: "Default",
url: "{action}/{controller}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
以下是我的控制器“产品”
public class ProdutoController : Controller
{
MozitMVCContext _context = new MozitMVCContext();
[HttpGet]
public ActionResult Cadastrar()
{
return View();
}
[HttpPost]
public ActionResult Cadastrar(Produto produto)
{
if (ModelState.IsValid)
{
_context.Produtos.Add(produto);
_context.SaveChanges();
return RedirectToAction("Cadastrar");
}
return View(produto);
}
[HttpGet]
public ActionResult Alterar(int id)
{
var produto = _context.Produtos.Find(id);
return View(produto);
}
[HttpPost]
public ActionResult Alterar(Produto produto)
{
if (ModelState.IsValid)
{
_context.Produtos.Attach(produto);
_context.Entry(produto).State = EntityState.Modified;
_context.SaveChanges();
return RedirectToAction("Listar");
}
return View(produto);
}
public ActionResult Listar()
{
var produto = _context.Produtos.ToList();
return View(produto);
}
public ActionResult Detalhes(int id)
{
var produto = _context.Produtos.Find(id);
return View(produto);
}
public ActionResult Excluir(int id)
{
_context.Produtos.Remove(_context.Produtos.Find(id));
_context.SaveChanges();
return RedirectToAction("Listar");
}
}
我想限制用户输入一个不同的数字,但是当我设置约束 [constraints: new {id = @"\d+"}] 我的 URL 最终采用“默认”路由时,为什么会发生这种情况?
(我是 MVC 新手,对路由不太了解)。
我正在尝试学习视频课程并让我的代码正常工作,我包含了一张图片:(对不起,图片质量,视频打印)
【问题讨论】:
-
约束中有空格吗?应该是
\d+没有空格(可能只是在这里格式化,所以只是问) -
是的,正在格式化。 :\ - 约束:新 {id = @"\d+"}
-
写入默认路由的url
标签: c# asp.net-mvc routes asp.net-mvc-routing custom-routes