[英]What is the easiest way to call a C# method from Javascript
我有一個LinkButton控件,我需要添加ac#方法。 目前,當我使用解析控件並將控件添加到頁面時,它會更改對javascript的調用,並且我得到了未定義。 我想辦法解決這個問題,就是定義一個javascript函數,從后面的代碼中調用c#方法,但我無法弄清楚如何做到這一點。
特別是當點擊鏈接按鈕時, 我需要javascript將鏈接按鈕的ID傳遞給C#方法 。
我試過這個:
foreach (Control Control in myctrl.Controls)
{
if (Control is LinkButton)
{
LinkButton lb = (LinkButton)Control;
lb.Click += LinkButton_Click;
}
Panel1.Controls.Add(myctrl);
}
public void LinkButton_Click(Object sender, EventArgs e)
{
BREAKPOINTHERE> Console.Write(e.ToString());
}
點擊時它永遠不會觸發。 這是生成的代碼:
<a id="dnn_ctr954_ViewPromotions_LinkButton2" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("dnn$ctr954$ViewPromotions$LinkButton2", "", true, "", "", false, true))">Get your Free 2</a>
現在,如果我把它放在我的aspx頁面,它工作正常:
<asp:LinkButton ID="test" OnClick="LinkButton_Click" runat="server">mybutton</asp:LinkButton>
我明白了,它運行正常:
<a id="dnn_ctr954_ViewPromotions_test" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("dnn$ctr954$ViewPromotions$test", "", true, "", "", false, true))">mybutton</a>
你不能這樣做。 Javascript存在於客戶端上。 服務器上存在C#代碼。 他們不可能彼此有任何背景知識。 服務器代碼運行以響應HTTP請求。
話雖這么說,您可以在C#中創建一個Web服務方法,並使用javascript調用它。 從你的問題的背景來看,它可能不會做你想要的。 Web服務方法是靜態的,並且與常規回發沒有相同的上下文。
但是,您可以查看一些類似這樣的文章: 使用Ajax擴展的客戶端Web服務調用
編輯:通過編輯,聽起來你只想讓你的按鈕回發到服務器。 這是ASP.Net的核心功能,很容易做到。 正如其他答案所示,您只需要在服務器代碼中連接一個click事件處理程序。
您可以使用C#編寫的javascript調用WebService或PageMethod 。
更新:由於您使用的是LinkButton,因此您只需在代碼隱藏中定義一個單擊處理程序 :
button.Click += button_Click
示例:通過ajax從后端加載頁面查詢注意假設正在使用jQuery ...只是一個示例
/ ************ c#代碼************************ /
[WebMethod]
public static nameValue[] GetPageQueryList()
{
HttpRequest q = myRequest;
NameValueCollection n = q.QueryString;
List<nameValue> thisList = new List<nameValue>();
if (n.HasKeys())
{
for (int i = 0; i < n.Count; i++)
{
nameValue newList = new nameValue(n.GetKey(i), n.Get(i));
thisList.Add(newList);
};
}
else
{
nameValue r = new nameValue("", "");
thisList.Add(r);
};
return thisList.ToArray();
}
#region nameValue
public class nameValue
{
/// <summary>
/// web service/webmethod needs 0 parameter constructor
/// </summary>
public nameValue()
{
}
public nameValue(string name, string value)
{
Name = name;
Value = value;
}
public string Name;
public string Value;
}
#endregion
/ ******************************* javascript代碼*************** /
// set the Query options from ajax results
function testLoadQuery(jdata)
{
var options = '';
for (var i = 0; i < jdata.length; i++)
{
if (jdata[i].Name === "PID")
{
queryPatientID = jdata[i].Value;
}
options += '<option value="' + jdata[i].Name + '">' + '(' + jdata[i].Name + ')' + jdata[i].Value + '</option>';
};
$("select.requestSelect").html(options);
};
// read on page load
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
data: "{}",
dataFilter: function(data)
{
var msg;
if (typeof (JSON) !== 'undefined' &&
typeof (JSON.parse) === 'function')
msg = JSON.parse(data);
else
msg = eval('(' + data + ')');
if (msg.hasOwnProperty('d'))
return msg.d;
else
return msg;
},
url: "MyFancyPage.aspx/GetPageQueryList",
success: function(msg)
{
testLoadQuery(msg);
$("#testonlyRequest").text("Yeah QueryList did load");
},
failure: function(msg)
{
$("#testonlyRequest").text("oh darn QueryList did not load");
}
});
/********************** the html sample *******************/
<div class="testonlyRequestContainer">
<div class="testonly" id="testonlyRequest">
testonlyRequest</div>
<select class="testrequestSelect" id="testrequestSelect" title="request stuff">
</select>
</div>
你正在尋找WebMethods,這里有一個jquery的例子,但可以很容易地適應基本的javascript。 好的醬是在“PageMethods.SomeMethod”部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.