C# 无法调用方法,因为参数在更新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”是通过引用传递的 在C# 无法调用方法,因为参数在更新mvc时通过引用异常传递,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net 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”是通过引用传递的 在rou
routes.mapmvcattributteroutes()上代码>
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
我该如何处理这个异常呢?对我来说似乎很直截了当。它直接告诉您它无法调用此操作方法,因为它需要一个pass-by引用。虽然动作方法看起来像标准的类方法,但它们有特定于动作的特定约定和限制。其中之一就是不能通过引用传递,这是由于MVC中路由和模型绑定的工作方式
长话短说,您需要将您的操作方法签名更改为不通过引用传递,并在操作代码中进行相应的补偿。(响应较旧的帖子,但这可能会对某些人有所帮助)
如果所调用的方法的范围不是“public”,则通过引用传递是有效的
我能够在一个控制器中通过引用将一个模型从一个动作方法传递到一个“构建模型”方法,但不能在另一个控制器中传递。比较表明,唯一的区别是方法的范围
将作用域从“public”更改为“private”(“protected”也有效)后,问题得到纠正。您可以在全局变量中尝试静态变量
private static test;
public ActionResult(string name)
{
test=name;
.....
}
所以我们不能再在MVC中使用引用传递功能了?这就是我所需要的。被接受的答案应该提到,如果方法是公开的,就不可能这样做。这是最好的答案。谢谢你节省了我的时间。