MVC默认的路由设置如下:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
我们常定义的model类一般都包含"ID"字段,类似:
class Foo {
public int Id { get; set; }
}
在Controller中我们的action也写作:
public FooController {
[HttpPost]
public ActionResult Edit(int id, Foo foo) {
}
}
一般情况下并不会导致什么问题,因为从数据库的内容也是根据当前ID取出的。
特殊情况下,比如用户的权限仅限于修改ID为1的内容(任何页面都会获取ID为1的内容),当用户手动修改URL链接中的ID为2的时候,Controller读到的ID为真实ID(1),但是在View中显示的ID值确实URL中的值(2),这会导致想要修改ID为1的内容,实际上却是修改到ID为2的内容。
总结:MVC中route的ID会覆盖model中的ID,导致页面部分数据显示错误
修改方法也很简单,不使用ID为参数即可
// route
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{identifier}", // URL with parameters
new { controller = "Home", action = "Index", identifier = UrlParameter.Optional } // Parameter defaults
);
// controller
public FooController {
[HttpPost]
public ActionResult Edit(int identifier, Foo foo) {
}
}
原文链接:.Net MVC中使用id为参数可能导致的问题,转载请注明来源!