最近,我将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。
我该如何处理这个异常呢?
发布于 2016-03-23 17:52:40
我觉得很直截了当。它直接告诉您,它不能调用此操作方法,因为它需要通过引用传递。虽然action方法看起来像标准类方法,但它们有特定于操作的特定约定和限制。其中之一是无法通过引用传递,这是由于在MVC中路由和模型绑定的工作方式。
长和短,您需要将操作方法签名更改为不通过引用传递,并在操作代码中进行相应的补偿。
发布于 2017-08-05 19:37:30
(回复一个较旧的帖子,但也许这会对某人有所帮助)
如果被调用的方法的作用域不是"public“,则可以通过引用传递。
我能够通过引用将一个模型从一个Action方法传递到一个控制器中的"build“方法,而不是在另一个控制器中。比较表明,唯一的区别是方法的范围。
在将范围从“公共”更改为“私有”(“受保护的”作品也是)之后,该问题得到了纠正。
发布于 2019-04-29 19:22:39
您可以尝试全局中的静态变量。
private static test;
public ActionResult(string name)
{
test=name;
.....
}https://stackoverflow.com/questions/36184814
复制相似问题