[英]How to call a function in the controller from the view using ASP.NET MVC C# Html
[英]How to call static method from ASP.NET MVC controller in C#
如果从ASP .NET MVC控制器调用,则GetMethod不会找到公共静态方法。 (从控制台应用程序中,它可以正常运行)。
为了解决这个问题,使用了SaveEntityGenericWrapper
方法。
如何从代码中删除SaveEntityGenericWrapper
?
如果从ASP .NET MVC 2控制器调用,为什么GetMethod("SaveEntityGeneric")
返回null
但GetMethod("SaveEntityGenericWrapper")
可以工作?
如果在MVC2中使用部分信任,如何使SaveEntityGeneric
私有?
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 }
}
您需要在GetMethod
调用中指定BindingFlags
,以便重新设置静态方法(我认为默认情况下仅返回公共实例方法)
var method = GetType().GetMethod("SaveEntityGenericWrapper",
BindingFlags.Static|BindingFlags.Public);
根本不要用private解决问题,而是尝试勇敢地解决更复杂的问题。
看到你以前的帖子,怎么简单了 。
至少使用
internal static List<IList> SaveEntityGeneric<TEntity>(TEntity original, TEntity modified)
where TEntity : EntityBase, new()
{
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.