Вызов на стороне клиента MVC для служебного метода C # из нескольких представлений - PullRequest
0 голосов
/ 23 января 2012

Я хотел бы знать, как вызывать служебный метод C # класса POCO (статический) из AJAX (или jquery, javascript или чего-либо еще) из представления MVC. Я хочу вызывать этот метод утилиты из ряда различных представлений, основанных на пользовательских входах на стороне клиента (например, нажав jquery fullcalendar eventClick) без необходимости интегрировать утилиту с контроллером каждого представления. Конечной целью является визуализация модального диалогового окна colorbox или, по крайней мере, отправка параметров / синтаксиса JQuery colorbox обратно в представление, которое будет выполняться в представлении (на стороне клиента). Цель метода на стороне сервера - стандартизировать вызовы диалогов jquery colorbox. Я в принципе понимаю, что контроллеры MVC не привязаны к использованию из определенных представлений. Итак, как мне настроить контроллер с методами действий для общих утилит и как настроить вызов контроллера из представления? Вызов view передаст два строковых параметра (в зависимости от того, какое событие щелкает пользователь) в метод служебной программы на стороне сервера: ключ, идентификатор. Метод на стороне сервера выполнит поиск на основе ключа и передаст обратно строковое значение, содержащее вызов colorbox, который будет выполнять функция JQuery в представлении (или это также может быть объект, содержащий пары имя / значение для параметров вызова colorbox). ).

Ниже приведен пример кода класса утилит на стороне сервера (без поддержки методов и т. Д.). Заранее спасибо.

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 Ответ

1 голос
/ 23 января 2012

ajax-вызов может быть любым действием контроллера. Он не должен перезванивать контролеру View, который обслуживал страницу в первую очередь.

Итак, на каком-то контроллере у вас есть: -

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