Как вызвать метод C # в файле .cs из функции Javascript в файле .js - PullRequest
0 голосов
/ 11 июля 2019

Я обновил вопрос согласно ответам ниже.Я думаю, что моя основная путаница заключается в параметре 'data' и что с ним делать в вызове js.

C # метод

[HttpPost]
        public string GetPreviewURL(string activityID)
        {
            try
            {
                var requestContext = ContextHandler.GetRequestContext(Request);

                object[] arguments = new object[] { requestContext };
                var sew= SumtContainer.Resolve<ICLWOrker>(typeof(ICLWOrker).FullName, arguments);

                return sew.GetPreviewUrl(activityID);
            }
            catch (Exception e)
        }

В этом JS вызовите параметр после "POST"Я думаю, что должны быть данные, но я запутался, как получить URL-адрес из JSON.

apiAccessClient = new apiClient();
        var apiUrl = STRING_SITE_PREFIX + '/service/webapi/GetPreviewURL/?activityID=' + actId;
        //define 'data' here?
        apiAccessClient.send(STRING_USERMODE, apiUrl, "POST", data, onPreviewSuccess, onError, 0, null, false, false, true); 
        return;

apiAccessClient в настоящее время настроен в другом файле js, в котором находится вызов Ajax

$.ajax({
    type: this.requestType,
    url: this.apiUrl,
    contentType: "application/json; charset=utf-8",
    context: this,
    async: isAsync,
    data: JSON.stringify(flattenModel(this.parameters)),
    statusCode: {
        401: function () { _UTL_NavigateToTimeOutPage(); }
    },
    beforeSend: function (request) {
        request.setRequestHeader("X--AjaxRequest", "1");
        request.setRequestHeader("_SUMTC", _UTL_GetCSRFToken());
        request.setRequestHeader("EmulatorUserName", _UTL_GetEmulatorUserName());
        request.setRequestHeader("x--authenticationmode", "jwt");
        request.setRequestHeader("sumtotaljwt", _UTL_GetJWT());
        request.setRequestHeader("broker_Session_Id", _UTL_GetBrokerSessionId());
        if (userMode !== null && userMode.length > 0) {
            request.setRequestHeader("X-UserMode", userMode);
        }
        request.setRequestHeader("x-viewableuserid", viewableUserId);
        if (!(isUndefinedOrNull(STRING_PROXYFORID))) {
            request.setRequestHeader("x-proxyforuserid", STRING_PROXYFORID);
            request.setRequestHeader("x-usermode", userMode);
        }

    },
    success: function (data, statusCode, jqXHR) {
        var contentType = jqXHR.getResponseHeader("Content-Type");
        if ((jqXHR.status == 200) && contentType.toLowerCase().indexOf("text/html") < 0) {
            successCallback(data, this.currentContext);
        } else if ((dataReturnTypeText == true) && (jqXHR.status == 200)){
            successCallback(data, this.currentContext);             
        }
    },
    error: function (jqXHR, textStatus, errorThrown) {
        if (jqXHR.status != 401) {
            if (errorCallback === null || errorCallback === undefined) {
                this.error(jqXHR, textStatus, errorThrown);
            }
            else {
                errorCallback(jqXHR, textStatus, errorThrown);
            }
        }
    }
});

Как я могу получить его, чтобы URL, который я получаю, открывался в новом окне?

Спасибо за ваше время!

1 Ответ

1 голос
/ 11 июля 2019

Как уже упоминалось в комментариях - JS работает на стороне клиента (т.е. в браузере), а C # работает на сервере. Для вызова вашего метода вам нужно использовать AJAX. Код на стороне клиента должен выглядеть так:

function launchURL_Test() {
var ID="your id";


 $.ajax({
    type: "POST",
    url: "yourcontroller/GetUrl",
    contentType: "application/json;charset=utf-8",
    data: "{'id':'" + ID + "'}",
    dataType: "json",
    success: function (data) {

      // do something with the result...

    },
    error: function (result) {
        console.log('error')

    }
});
}

ПРИМЕЧАНИЕ. Если вы используете не контроллер, а код с выделенным кодом, ваш метод должен выглядеть следующим образом

[WebMethod]
public static string GetUrl(string id)
{
   //some code
   return url;
}

Или в стандартном контроллере MVC ваш метод должен выглядеть следующим образом:

[HttpPost]
public ActionResult GetUrl(string id)
{
    //your code
    return url;
}

и, наконец, чтобы открыть новое окно с URL-адресом метода, обновите ваш ajax success:

success: function (data) {

  window.open(data);

},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...