[英]ASP.NET MVC - About Constraints in Routes
我在自定義路線上使用約束時遇到困難。 以下是我的類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 }
);
}
}
以下是我的控制器“ 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的新手,我對路由了解不多)。
我正在嘗試學習視頻課程並使代碼工作,其中包含一個圖片:(對圖像質量,視頻打印感到抱歉)
對於這樣的簡單方案,可以使用這種Regex模式。 它會工作。
但是,要獲得適當的約束(尤其是在使用自定義約束時),應通過繼承IRouteConstraint接口來創建自己的約束
public class MyRouteConstratint : IRouteConstraint
{
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
//Logic goes here
return true;
}
}
然后在RouteConfig中注冊它,如下所示:
routes.MapRoute(
name: "produtos",
url: "produtos/{action}/{id}",
defaults: new { controller = "Produto", action = "Listar", id = UrlParameter.Optional },
constraints: new MyRouteConstratint()
);
希望會有所幫助。
ASP.NET MVC中也討論了此問題:帶有可選參數的路由,但如果提供,則必須與\\ d +匹配
簡短的答案是:使用此約束模式: id = @"\\d*"
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.