[英]cannot call method because parameter is passed by reference exception on updating mvc
最近我将MVC更新为5.1。 我越来越异常了
无法在控制器'Inspinia_MVC5_SeedProject.CodeTemplates.ElectronicsController'上调用操作方法'Void MyAd(Inspinia_MVC5_SeedProject.Models.Ad ByRef,System.String,System.String,System.String)',因为参数'Inspinia_MVC5_SeedProject.Models.Ad&ad'已通过引用。
在routes.MapMvcAttributeRoutes();
MyAd
功能是:
public void MyAd(ref Ad ad,string SaveOrUpdate,string cateogry = null,string subcategory = null)
{
var type = System.Web.HttpContext.Current.Request["type"];
var isbiding = System.Web.HttpContext.Current.Request["bidingAllowed"];
var condition = System.Web.HttpContext.Current.Request["condition"];
var pp = System.Web.HttpContext.Current.Request["price"];
//other huge stuff.
}
我在不同的控制器中使用此功能。
我调用该函数将数据保存在ad
对象中
MyAd(ref ad,"Save","Electronics","HomeAppliances");
然后我将数据用作ad.type
。
我该如何处理这个例外?
(回复一个较旧的帖子,但也许这会对某人有所帮助)
如果被调用方法的范围不是“公共”,则通过引用传递。
我能够通过引用将模型从Action方法传递到一个控制器中的“构建模型”方法,但不能传递给另一个控制器。 比较显示,唯一的区别是方法的范围。
在将范围从“公共”更改为“私有”(“受保护”也起作用)之后,问题已得到纠正。
对我来说似乎很直截了当。 它告诉你它不能调用这个动作方法,因为它需要通过引用传递。 虽然操作方法看起来像标准类方法,但它们具有特定于操作的特定约定和限制。 其中一个是无法通过引用传递,这是由于路由和模型绑定在MVC中的工作方式。
无论长短,您都需要将操作方法签名更改为不通过引用传递,并在操作代码中进行相应补偿。
您可以在全局中尝试静态变量
private static test;
public ActionResult(string name)
{
test=name;
.....
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.