[英]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.