首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法调用方法,因为参数是在更新mvc时通过引用异常传递的。

无法调用方法,因为参数是在更新mvc时通过引用异常传递的。
EN

Stack Overflow用户
提问于 2016-03-23 17:25:21
回答 3查看 2.3K关注 0票数 5

最近,我将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函数是:

代码语言:javascript
复制
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对象中的数据。

代码语言:javascript
复制
MyAd(ref ad,"Save","Electronics","HomeAppliances");

然后我使用数据作为ad.type

我该如何处理这个异常呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-23 17:52:40

我觉得很直截了当。它直接告诉您,它不能调用此操作方法,因为它需要通过引用传递。虽然action方法看起来像标准类方法,但它们有特定于操作的特定约定和限制。其中之一是无法通过引用传递,这是由于在MVC中路由和模型绑定的工作方式。

长和短,您需要将操作方法签名更改为不通过引用传递,并在操作代码中进行相应的补偿。

票数 3
EN

Stack Overflow用户

发布于 2017-08-05 19:37:30

(回复一个较旧的帖子,但也许这会对某人有所帮助)

如果被调用的方法的作用域不是"public“,则可以通过引用传递。

我能够通过引用将一个模型从一个Action方法传递到一个控制器中的"build“方法,而不是在另一个控制器中。比较表明,唯一的区别是方法的范围。

在将范围从“公共”更改为“私有”(“受保护的”作品也是)之后,该问题得到了纠正。

票数 7
EN

Stack Overflow用户

发布于 2019-04-29 19:22:39

您可以尝试全局中的静态变量。

代码语言:javascript
复制
private static test;

public ActionResult(string name)
{
   test=name;
    .....
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36184814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档