![](/img/trans.png)
[英]How to call JavaScript/jQuery function from .cs file (C#)
[英]How to call C# method in .cs file from Javascript function in .js file
我已經按照以下答案更新了問題。 我認為我的主要困惑在於'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”之后的參數我認為應該是數據,但是我很困惑如何從JSON中獲取URL。
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?
感謝您的時間!
如評論中所述-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')
}
});
}
注意:如果您不使用控制器,而是使用代碼隱藏的,則您的methot應該如下所示
[WebMethod]
public static string GetUrl(string id)
{
//some code
return url;
}
或在標准MVC Controller中,您的方法應如下所示:
[HttpPost]
public ActionResult GetUrl(string id)
{
//your code
return url;
}
最后,使用方法中的URL打開新窗口以更新您的ajax成功:
success: function (data) {
window.open(data);
},
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.