![](/img/trans.png)
[英]How can i call two javascript function from c# page both on button click
[英]How can I call a javascript function using C# in Content Grabber?
我試圖在Content Grabber中使用C#調用Javascript函數。 (Content Grabber是網絡抓取軟件)。
Javascript代碼是這樣的:
$.definePage({
idRecaptcha: null,
init: function() {},
carregarReCaptcha: function() {
if(page.idRecaptcha == null) {
var sitekey = $("#reCaptchaPublicKey").val();
page.idRecaptcha = grecaptcha.render($("#tecRecaptcha")[0], {
'callback' : page.verifyCallback,
'sitekey': sitekey
});
}
},
verifyCallback: function(response) {
if(response) {
$("#form").submit();
}
}
});
var onloadCallback = function() {
page.carregarReCaptcha();
}
我要調用的函數是“ verifyCallback”。 此函數本質上提交了Recaptcha令牌,該令牌將驗證我輸入的令牌是否正確。
在我的Content Grabber代理中,我想調用此函數,並且有以下代碼,但是它給我一個錯誤:
using System;
using System.Web.UI;
using Sequentum.ContentGrabber.Api;
public class Script
{
//See help for a definition of CustomScriptArguments.
public static CustomScriptReturn CustomScript(CustomScriptArguments args)
{
// retrieve page from current handler
var page = System.Web.HttpContext.Current.CurrentHandler as Page;
if (page == null)
{
// do something, e.g. throw exception
return CustomScriptReturn.Pause();
}
// Place your script code here.
// Return empty for no special action.
string response = args.DataRow["Captcha"];
string script = "page.verifyCallback('" + response + "');";
// call ClientScript from existing page instance
page.ClientScript.RegisterStartupScript(page.GetType(), "page.verifyCallback", script, true);
return CustomScriptReturn.Empty();
}
}
當我編譯它時,它返回此錯誤:
Object reference not set to an instance of an object.
看來我不能只刪除object sender, EventArgs e
我對JS或C#並不是很熟悉,因此我將不勝感激。 非常感謝!
發生此問題的原因是,您試圖使用不是從System.Web.UI.Page
(代碼隱藏頁的基類)繼承的類的ClientScript
實例。 只要您可以訪問HttpContext.Current
,就可以從其處理程序屬性(即CurrentHandler
)中檢索Page
實例,並使用ClientScript
,如下例所示:
public class Script
{
//See help for a definition of CustomScriptArguments.
public CustomScriptReturn CustomScript(CustomScriptArguments args, object sender, EventArgs e)
{
// retrieve page from current handler
var page = HttpContext.Current.CurrentHandler as Page;
if (page == null)
{
// do something, e.g. throw exception
}
// Place your script code here.
// Return empty for no special action.
string response = args.DataRow["Token"];
string script = "verifyCallback('" + response + "');";
// call ClientScript from existing page instance
page.ClientScript.RegisterStartupScript(page.GetType(), "verifyCallback", script, true);
return CustomScriptReturn.Empty();
}
}
更新:
至於解釋編輯后的第二個錯誤,發生該錯誤的原因是,您在CustomScript
方法中聲明了一個名為callback
方法,該方法無效(並且return
語句必須位於最后一個)。 如果不需要sender
和EventArgs
處理程序,則只需忽略它們。 這是正確返回CustomScriptReturn
的示例:
public static CustomScriptReturn CustomScript(CustomScriptArguments args)
{
// retrieve page from current handler
var page = System.Web.HttpContext.Current.CurrentHandler as Page;
if (page == null)
{
// do something, e.g. throw exception
}
// Place your script code here.
// Return empty for no special action.
string response = args.DataRow["Captcha"];
string script = "page.verifyCallback('" + response + "');";
// call ClientScript from existing page instance
page.ClientScript.RegisterStartupScript(page.GetType(), "page.verifyCallback", script, true);
return CustomScriptReturn.Empty();
}
相關問題:
除了@Tetsuya的答案外,似乎您傳遞給RegisterStartupScript的Java腳本也會遇到問題。
我認為您不能只調用“ verifyCallback”,因為這是在$.definePage({})
調用范圍內定義的函數。
因此,您需要對此進行更深入的研究,並確定是否verifyCallback
函數是公開公開的。
基於此代碼:
var onloadCallback = function() {
page.carregarReCaptcha();
}
我說你需要打電話給:
page.ClientScript.RegisterStartupScript(page.GetType(), "page.verifyCallback", script, true);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.