簡體   English   中英

從JavaScript調用函數背后的代碼(不是AJAX!)

[英]Call Code Behind Function from JavaScript (not AJAX!)

我的服務器端有一個功能。

protected void SelectParticipant(string CompanyId, string EmployeeNumber)
{
    //I do some stuff here.
}

我想從客戶端的JavaScript調用此函數。 我嘗試搜索它,但是發現的所有建議都是通過AJAX調用Page方法。 我不想那樣,我想引起回發。

function MyJSFunction(companyid, employeenumber)
{
    //cause postback and pass the companyid and employee number
    //this is where I need help!
}

如何通過JavaScript進行回發並運行服務器端功能?

您可以使用兩個HiddenField解決您的問題。

  • 使用js / jquery設置兩個HiddenField(根據需要)
  • 強制在js函數中提交表單( form1.submit()
  • 在formLoad中,檢查HiddenFields是否為空。 如果否,請運行您的方法,然后清除HiddenFields

您可以使用__doPostBack函數發布到服務器。 只需確保將服務器控件添加到頁面即可插入該功能。 這是一個小示例,您可以根據需要進行自定義:

ASPX:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="Try1.WebForm1" EnableEventValidation="false"%>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="Scripts/jquery-1.10.2.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $('#lblInvoke').hover(
                function () {
                    __doPostBack('<%= LinkButton1.ClientID %>', 'value1,value2');
                     }
                );
             });
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <label id="lblInvoke">Hover This!</label>
        <br />
        <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click" Style="display:none;">LinkButton</asp:LinkButton>
        <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
    </div>

    </form>
</body>
</html>

后面的代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Try1
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        protected void LinkButton1_Click(object sender, EventArgs e)
        {
            string passedArgument = Request.Params.Get("__EVENTARGUMENT");
            string[] paramsArray = passedArgument.Split(',');
            Label1.Text = string.Format("Returned from server. params: {0},{1}", paramsArray[0], paramsArray[1]);
        }
    }
}

確保將EnableEventValidation =“ false”屬性添加到頁面。

這是我的方法...

<script type="text/javascript">
function AddParticipant(companyid, employeenumber)
    {
        $("#AddParticipantPanel").dialog("close");
        var myargs = {CompanyId: companyid, EmployeeNumber: employeenumber};
        var myargs_json = JSON.stringify(myargs);
        __doPostBack('<%= SelectParticipantBtn.UniqueID %>', myargs_json);
    }
</script>
<asp:Button runat="server" ID="SelectParticipantBtn" ClientIDMode="Static" OnClick="SelectParticipantBtn_Click" style="display:none;" />

在服務器端...

/* this is an inner class */
public class SelectParticipantEventArgs
{
    public string CompanyId {get; set;}
    public string EmployeeNumber {get; set;}
}
protected void SelectParticipantBtn_Click(object sender, EventArgs e)
{   
    string args = Request.Form["__EVENTARGUMENT"];
    var myargs = JsonConvert.DeserializeObject<SelectParticipantEventArgs>(args);
    string emp_no = myargs.EmployeeNumber;
    string company_id = myargs.CompanyId;
    //do stuff with my arguments
}

我沒有使用HiddenFields,而是使用了隱藏按鈕。 此模型效果更好,因為我可以直接進入按鈕的事件處理程序,而不必將代碼添加到Page_Load函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM