无法调用方法,因为参数在更新mvc时被引用异常传递

时间:2016-03-23 17:25:21

标签: c# asp.net asp.net-mvc

最近我将MVC更新为5.1。我正在异常

  

无法调用操作方法' Void MyAd(Inspinia_MVC5_SeedProject.Models.Ad ByRef,System.String,System.String,System.String)'在控制器' Inspinia_MVC5_SeedProject.CodeTemplates.ElectronicsController'因为参数' Inspinia_MVC5_SeedProject.Models.Ad&广告'通过引用传递。

on class Car{ Color:string; Timestamp:any; //this comes as a string in JSON but I want it to be of type Date object }

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");

我该如何处理这个例外?

3 个答案:

答案 0 :(得分:3)

对我来说似乎很直截了当。它告诉你它不能调用这个动作方法,因为它需要通过引用传递。虽然操作方法看起来像标准类方法,但它们具有特定于操作的特定约定和限制。其中一个是无法通过引用传递,这是由于路由和模型绑定在MVC中的工作方式。

长短,您需要将操作方法​​签名更改为不通过引用传递,并在操作代码中进行相应补偿。

答案 1 :(得分:3)

(回复较旧的帖子,但也许这会对某人有所帮助)

如果被调用方法的范围不是“公共”,则按引用传递。

我能够通过引用将模型从Action方法传递到一个控制器中的“构建模型”方法,但不能传递给另一个控制器。比较显示,唯一的区别是方法的范围。

将范围从“公共”更改为“私有”(“受保护”也有效)后,问题已得到纠正。

答案 2 :(得分:0)

您可以尝试在全局变量中使用静态变量

private static test;

public ActionResult(string name)
{
   test=name;
    .....
}