0

试图在这里做一些动态的事情。大多数对此操作的调用都会为 actionName 传递一个“none”参数,但是,偶尔会有一个调用传递我想要从中返回数据的操作的名称,而不是这个。它是动态的原因是它正在从数据库中读取值,因此调用它的函数可能会或没有 actionName 覆盖。我需要能够使用 actionName 参数作为要重定向到的 JsonResult 的名称来重定向到另一个 JsonResult。有没有办法通过名称调用另一个 JsonResult 然后将结果传回这个函数?

public JsonResult GetBadgeValues(int badgeId, string actionName) {
    if (actionName != "none") {
        return actionName;
    }

    ...
}
4

1 回答 1

0

这是一个冗长的答案,但它应该有效:

Dictionary<string, Func<JsonResult>> nameToMethodDict = 
    new Dictionary<string, Func<string, JsonResult>>(){
        {"name", otherMethod}
    };

public JsonResult GetBadgeValues(int badgeId, string actionName) {
    if (actionName != "none") {
        return actionName;
    }  
    else {
        return nameToMethodDict[actionName]();
    }
}

public JsonResult otherMethod() {
    ...
}

不过,我会重新考虑这种架构,因为如果您想根据数据库中的某个值返回不同的数据,它实际上应该是存储过程中基于集合的逻辑,而不是这种愚蠢的字符串-> 委托关系。另一方面,如果您只有 5 个或可数个可能的 actionName 值,那么您真的应该让它们成为单独的 MVC 路由。

于 2013-07-01T17:37:32.433 回答