簡體   English   中英

無法調用方法,因為參數在更新mvc時被引用異常傳遞

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM