最近我将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");
。
我该如何处理这个例外?
答案 0 :(得分:3)
对我来说似乎很直截了当。它告诉你它不能调用这个动作方法,因为它需要通过引用传递。虽然操作方法看起来像标准类方法,但它们具有特定于操作的特定约定和限制。其中一个是无法通过引用传递,这是由于路由和模型绑定在MVC中的工作方式。
长短,您需要将操作方法签名更改为不通过引用传递,并在操作代码中进行相应补偿。
答案 1 :(得分:3)
(回复较旧的帖子,但也许这会对某人有所帮助)
如果被调用方法的范围不是“公共”,则按引用传递。
我能够通过引用将模型从Action方法传递到一个控制器中的“构建模型”方法,但不能传递给另一个控制器。比较显示,唯一的区别是方法的范围。
将范围从“公共”更改为“私有”(“受保护”也有效)后,问题已得到纠正。
答案 2 :(得分:0)
您可以尝试在全局变量中使用静态变量
private static test;
public ActionResult(string name)
{
test=name;
.....
}