2
我在自定义路由上使用约束时遇到困难。 以下是我的课RouteConfig.csASP.NET MVC - 关于路由中的约束
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 }
);
}
}
和下面是我的控制器“Produto”
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 +'没有空格(可能只是在这里格式化,所以只是问) –
是的,格式化的东西。 :\ - constraints:new {id = @“\ d +”} – IgoR
写入默认路由的url – vlukham