MVC客户端从多个视图调用C#实用程序方法

时间:2012-01-23 02:40:20

标签: model-view-controller c#-4.0 methods call client-side

我想知道如何从MVC视图中调用AJAX(或jquery或javascript或其他)中的POCO类(静态)C#实用程序方法。我想基于客户端用户输入(例如,单击jquery fullcalendar eventClick)从许多不同的视图中调用此实用程序方法,而不必将该实用程序与每个视图的控制器集成。最终目标是渲染一个颜色框模态对话框,或者至少将JQuery颜色框参数/语法发送回要在视图(客户端)中执行的视图。服务器端方法的目的是标准化对jquery颜色框对话框的调用。我原则上理解MVC控制器与特定视图的使用无关。那么,如何使用常用实用程序的操作方法设置控制器,以及如何从视图中设置对控制器的调用?视图调用将两个字符串参数(基于用户单击的事件)传递给服务器端实用程序方法:key,identifier。服务器端方法将基于密钥执行查找并传回包含视图中的JQuery函数将执行的颜色框调用的字符串值(或者它也可以是包含颜色框调用参数的名称/值对的对象)。

下面是服务器端实用程序类代码的示例(没有支持方法等)。提前谢谢。

namespace UI.Utility.Details
{
    public static class Details
    {

        [WebMethod]
        public static string CallColorbox(string key, string identifier, string colorboxCall)
        {
            if (string.IsNullOrEmpty(key))
                throw new Exception("Error: No key supplied.");

            if (string.IsNullOrEmpty(identifier))
                throw new Exception("Error: No identifier supplied.");

            DetailSettings settings = GetSettings(key, identifier);

            if (settings == null)
                throw new Exception(string.Format("Error: Settings not found for key [{0}].", key));

            colorboxCall = null;
            if (settings != null)
            {
                //$.colorbox({iframe:true, innerWidth:500, innerHeight:350, href:newUrl, opacity:0.35, scrolling:false });
                colorboxCall =
                    string.Format(
                    //"$.colorbox({ iframe:{0}, innerWidth:{1}, innerHeight:{2}, {3}:{4}, opacity:{5}, scrolling:{6} });",
                        "{0} iframe:{1}, innerWidth:{2}, innerHeight:{3}, {4}:{5}, opacity:{6}, scrolling:{7} {8}",
                        "{",
                        settings.iframe,
                        settings.innerWidth,
                        settings.innerHeight,
                        settings.identifierType,
                        settings.identifier,
                        settings.opacity,
                        settings.scrolling,
                        "}"
                    );
            }
            if (string.IsNullOrEmpty(colorboxCall))
                throw new Exception(string.Format("Error: colorbox call not constructed for key [{0}].", key));

            return colorboxCall;
        }
    }

}

1 个答案:

答案 0 :(得分:1)

ajax调用可以是任何控制器动作。它不必回调到首先为Page提供服务的View的控制器。

所以,在某些控制器上你有: -

 [HttpGet]
 public string CallColorbox(string key, string identifier, string colorboxCall)
 {
    return  UI.Utility.Details.CallColorbox(key,identifier,colorboxCall);
 }