如何从ASP.NET MVC控制器在C#中调用静态方法 [英] How to call static method from ASP.NET MVC controller in C#

查看:773
本文介绍了如何从ASP.NET MVC控制器在C#中调用静态方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果从ASP .NET MVC控制器名为

GetMethod没有找到公共静态方法。
(从控制台应用程序它的工作确定)。

要解决这个伪 SaveEntityGenericWrapper 使用方法。

如何从code删除 SaveEntityGenericWrapper

为什么实现getMethod(SaveEntityGeneric)收益,但实现getMethod(SaveEntityGenericWrapper )作品
如果从ASP .NET MVC 2控制器叫什么名字?

如何让 SaveEntityGeneric 私人,如果部分信任在MVC2使用?

 公共类EntityBase(){    公共无效SaveEntity(EntityBase原创)
    {
        VaR方法=的GetType()实现getMethod(SaveEntityGenericWrapper);
        //为什么如果从ASP .NET MVC 2控制器称为此行返回null:
        //方法=的GetType()实现getMethod(SaveEntityGeneric);
        变种克= method.MakeGenericMethod(的GetType());
        gm.Invoke(这一点,新的对象[] {原来,这});
    }    //假包装reqired只MVC反射调用。
    //如何去除呢?
    公开名单<&IList的GT; SaveEntityGenericWrapper< TEntity>(TEntity原来,TEntity修改)
        其中,TEntity:EntityBase,新的()
    {
        返回SaveEntityGeneric< TEntity>(原件,修改);
    }    公共静态列表<&IList的GT; SaveEntityGeneric< TEntity>(TEntity原来,TEntity修改)
                其中,TEntity:EntityBase,新的()
    {...实际的工作在这里完成}
}


解决方案

您需要在的的BindingFlags =htt​​p://msdn.microsoft。 COM / EN-US /库/ 05eey4y9.aspx相对=nofollow> GetMethod 打电话让静态方法retured(我认为,默认情况下只返回公共实例方法)

  VAR方法=的GetType()。实现getMethod(SaveEntityGenericWrapper
                                  BindingFlags.Static | BindingFlags.Public);

GetMethod does not find public static method if called from ASP .NET MVC controller. (From console application it work OK).

To solve this dummy SaveEntityGenericWrapper method is used.

How to remove SaveEntityGenericWrapper from code ?

Why GetMethod("SaveEntityGeneric") returns null but GetMethod("SaveEntityGenericWrapper") works if called from ASP .NET MVC 2 controller ?

How to make SaveEntityGeneric private if partial trust is used in MVC2 ?

public class EntityBase() {

    public void SaveEntity(EntityBase original)
    { 
        var method = GetType().GetMethod("SaveEntityGenericWrapper");
        // why this line returns null if called from ASP .NET MVC 2 controller:
        // method = GetType().GetMethod("SaveEntityGeneric");
        var gm = method.MakeGenericMethod(GetType());
        gm.Invoke(this, new object[] { original, this });
    }

    // Dummy wrapper reqired for mvc reflection call only. 
    // How to remove it?
    public List<IList> SaveEntityGenericWrapper<TEntity>(TEntity original, TEntity modified)
        where TEntity : EntityBase, new()
    {
        return SaveEntityGeneric<TEntity>(original, modified);
    }

    public static List<IList> SaveEntityGeneric<TEntity>(TEntity original, TEntity modified)
                where TEntity : EntityBase, new()
    { ... actual work is performed here  }
}

解决方案

You need to specify BindingFlags in the GetMethod call so that static methods are retured (I think that by default only public instance methods are returned)

 var method = GetType().GetMethod("SaveEntityGenericWrapper",
                                  BindingFlags.Static|BindingFlags.Public);

这篇关于如何从ASP.NET MVC控制器在C#中调用静态方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆