代码之家  ›  专栏  ›  技术社区  ›  James Campbell

从javascript中调用C方法最简单的方法是什么

  •  2
  • James Campbell  · 技术社区  · 16 年前

    我有一个LinkButton控件,需要将C方法添加到其中。当前,当我使用Parse控件并将该控件添加到页面时,它会更改对javascript的调用,并且我会得到未定义的调用。我认为解决这个问题的方法是定义一个javascript函数,它将从后面的代码中调用c方法,但我不知道如何做到这一点。

    当单击链接按钮时进行特殊处理 我需要JavaScript将LinkButton的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(&quot;dnn$ctr954$ViewPromotions$LinkButton2&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, 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(&quot;dnn$ctr954$ViewPromotions$test&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, true))">mybutton</a>
    
    5 回复  |  直到 16 年前
        1
  •  4
  •   jrummell    16 年前

    你可以打电话给 WebService PageMethod 来自用C编写的javascript。

    更新:由于使用了LinkButton,因此可以简单地定义 click handler 在你的代码背后:

    button.Click += button_Click
    
        2
  •  7
  •   womp    16 年前

    你不能这样做。客户端上存在javascript。服务器上存在C代码。他们不可能对彼此有任何背景知识。 服务器代码运行以响应HTTP请求。

    也就是说,您可以在C中创建一个Web服务方法,并使用JavaScript调用它。不过,从你的问题的背景来看,它可能不会满足你的要求。Web服务方法是静态的,与常规回发没有相同的上下文。

    但是,您可以查看以下几篇文章: Client-Side Web Service Calls with Ajax Extensions

    编辑: 通过编辑,您似乎只想将按钮发回服务器。这是ASP.NET的核心功能,而且很容易实现。正如其他答案所建议的,您只需要在服务器代码中连接一个click事件处理程序。

        3
  •  1
  •   Mark Schultheiss    16 年前

    示例:通过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>
    
        4
  •  0
  •   Francisco Aquino    16 年前

    你在找webmethods,有一个例子 with jquery 这里,但是可以很容易地适应基本的javascript。好酱汁在“pagemethods.somemethods”部分。

        5
  •  0
  •   plinth    16 年前

    my company 的工具包,我们实现了一项我们称之为 remote invoke . 这由两部分组成-在客户端,有一个名为remoteinvoke()的javascript方法,它使用一个方法名和一个参数数组传递给该方法。在服务器端,用属性[RemoteInvokable]修饰要调用的公共方法。RemoteInvoke尽可能匹配签名(如果需要,请键入casting),然后调用适当的公共方法(如果找到了公共方法)。

    它不适用于像点击操作这样简单的事情,但是如果你需要更复杂的事情,它会非常有效。