Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将JS参数传递给.net代码隐藏中的c#函数_Javascript_C#_Jquery_Asp.net_Ajax - Fatal编程技术网

Javascript 将JS参数传递给.net代码隐藏中的c#函数

Javascript 将JS参数传递给.net代码隐藏中的c#函数,javascript,c#,jquery,asp.net,ajax,Javascript,C#,Jquery,Asp.net,Ajax,我试图从JavaScript调用一个c#函数,但问题是,我需要为该函数传递一个JS参数。我该怎么做 这是我的Js var categoryLists = <%= this.javaSerial.Serialize(this.categoryList) %>; function addInput(type, value, name, id, onclick, parentId) { var element = document.createEl

我试图从JavaScript调用一个c#函数,但问题是,我需要为该函数传递一个JS参数。我该怎么做

这是我的Js

 var categoryLists = <%= this.javaSerial.Serialize(this.categoryList) %>;
        function addInput(type, value, name, id, onclick, parentId) {
            var element = document.createElement("input");
            element.type = type;
            element.value = value;
            element.name = name;
            element.id = id;
            element.onclick = onclick;
            element.src = "trash.png";
            element.style.width = "25px";
            element.style.height = "25px";
            element.style.marginBottom = "3%";
            var parent = document.getElementById(parentId);
            
            parent.appendChild(element);
        }

        function addBreak(parentId) {
            var br = document.createElement("br");
            var parent = document.getElementById(parentId);
            parent.appendChild(br);
        }
         
        window.onload = function () {
            alert(this.categoryLists.length);
            for (var j = 0; j < this.categoryLists.length; j++) {
                var temp = "button" + j;
                addInput('image', '', temp, temp, <%=DeleteCategory(%>+categoryLists[j]), 'rightdiv');
                addBreak('rightdiv');
            }
        }
更新-我这样调用c#函数。。。它们工作得很好。 先谢谢你

更新-所有的评论,我已经尝试使用ajax或jquery-我不知道这是什么。。。现在我的js看起来像这样,它坏了。。。是否存在语法问题

 $(function () {
            function addInput(type, value, name, id, onclick, parentId) {
                var element = document.createElement("input");
                element.type = type;
                element.value = value;
                element.name = name;
                element.id = id;
                element.onclick = onclick;
                element.src = "trash.png";
                element.style.width = "25px";
                element.style.height = "28px";
                element.style.marginBottom = "3%";
                var parent = document.getElementById(parentId);

                parent.appendChild(element);
            }

            function addBreak(parentId) {
                var br = document.createElement("br");
                var parent = document.getElementById(parentId);
                parent.appendChild(br);
            }

             for (var j = 0; j < this.categoryLists.length; j++) {
                var temp = "button" + j;
                addInput('image', '', temp, temp, temp, 'rightdiv');
                addBreak('rightdiv');
            }
        });
$(函数(){
函数addInput(类型、值、名称、id、onclick、parentId){
var元素=document.createElement(“输入”);
element.type=类型;
元素值=值;
element.name=名称;
element.id=id;
element.onclick=onclick;
element.src=“trash.png”;
element.style.width=“25px”;
element.style.height=“28px”;
element.style.marginBottom=“3%”;
var parent=document.getElementById(parentId);
parent.appendChild(元素);
}
函数addBreak(parentId){
var br=document.createElement(“br”);
var parent=document.getElementById(parentId);
父、子(br);
}
for(var j=0;j
您有很多方法可以做到这一点

你可以使用作弊的方法。放入一个文本框和一个标准按钮(将调用服务器端代码隐藏)。(将此按钮和文本框的clientID模式设置为静态)

因此,上面触发了一个页面回发,然后在load事件中,我们有:

 If Request("__EVENTTARGET") = "MyCoolEventName" Then

     Dim str As String = Request("__EVENTARGUMENT")

        Debug.Print("passed value = " & str)
 End If
或者作为C#

以上是一些简单的方法

以上所有的想法都会导致一篇完整的文章返回运行。现在,如果您调用的例程确实需要设置/获取/更改/处理/查看页面上的任何控件,那么当然需要并希望所有重要页面都发回

最后但并非最不重要?好的,您可以执行一个ajax调用,该调用将调用页面上的特定例程,传递值(如果需要),并且只运行该例程。这可以是非常好的,它很快,你不会得到一个完整的页面后回来。因此,如果您需要运行的例程不需要修改,或者不需要在web页面上做很多事情,那么ajax无疑是最好的方法(假设您调用的例程不需要修改或更改页面上的内容,因为如上所述,不会发生页面回发。如果您希望将该值与代码回发一起使用并修改页面上的内容,则需要回发

但是,让我们假设您确实需要传递一个,或者执行一个值

好吧,我建议使用jQuery——它只是让代码编写起来更容易一点

比如说,在您的网页中,您有一个简单的sub,并希望传递两个值:

<WebMethod()>
 Public Shared Sub MySimpleSub(MyCoolPassValue As String, Age As Integer)

    Debug.Print("passed string value = " & MyCoolPassValue & vbCrLf & "Age = " & Age.ToString)

 End Sub
因此,在上面,它只是一个公共子(在该网页的代码后面)。 (注意共享-它必须是静态子-因为我们调用了页面-但没有完整的类对象模型)。 我们还需要一个

Imports System.Web.Services
好的,现在将上述内容称为ajax

我们得到这个:

            var myvaluetopass = "this is some text to pass as variable";
            var age = 23;

            $.ajax({
                type: "POST",
                async: true,
                url: 'OnePicture.aspx/MySimpleSub',
                data: JSON.stringify({MyCoolPassValue: myvaluetopass, Age: age}),
                contentType: "application/json; charset=utf-8",
                datatype: "json"
            }
            );
        }
因此,在上面,我们在web表单中将两个值传递给sub

上面确实假设了jQuery,我可以把它写成纯JavaScript,但是上面给出了

如何传递值-隐藏控制思想。 或者使用_udopostback-这样就不需要按钮+隐藏文本框 (并使用style=“display:none”隐藏上面的按钮和文本框(如果您使用该方法,并使其正常工作)

如前所述,我不知道为什么,但如果要使用dopostback,则必须将Scriptmanager放入页面中。(或者将有效的控件引用作为第一个参数传递-它将仅传递给按钮代码隐藏例程)。但是,我的dopostback示例simple获取/获取页面加载事件(事件参数)中的值


最后但并非最不重要的一点是,我们将一个值方向传递给该页面中的web方法(sub)——这是一个ajax调用,请记住,该例程的代码必须在不假设页面回发的情况下工作(与之前所有假设需要回发的示例相比).

您不使用AJAX有什么具体原因吗?请参阅:aspnet不是这样工作的。您需要一个AJAX调用或表单post。这能回答您的问题吗?对不起!我应该更新这个问题并给出全部内容。我以这种方式调用其他函数,它们工作正常。只是在我传递参数时,您可以生成它不起作用asp.net视图/控件中的代码(包括javascript代码)使用c#,但在浏览器中呈现页面后不能调用c#函数。如果要从浏览器中调用c#,则需要使用ajax(根据工具集的不同,可以采用不同的形式)。您在上面的代码中显示的是使用c#代码构造javascript代码,c#代码是在发送到浏览器之前创建的,javascript目前没有运行,因为它尚未在浏览器中托管。我花了一些时间才理解这一点,但这实际上已经解决了!!非常感谢您:D
<asp:Button ID="btnHidden" runat="server" Text="hidden but"  style="display:none"/>
<asp:TextBox ID="TextHiddenBox" runat="server" ClientIDMode="Static" style="display:none" ></asp:TextBox>
     var myvaluetopass = "this is some text to pass as variable";
     __doPostBack("MyCoolEventName", myvaluetopass);
 If Request("__EVENTTARGET") = "MyCoolEventName" Then

     Dim str As String = Request("__EVENTARGUMENT")

        Debug.Print("passed value = " & str)
 End If
 if (Request("__EVENTTARGET") == "MyCoolEventName")
 {
    string str = Request("__EVENTARGUMENT");
    Debug.Print("passed value = " + str);
 }
<WebMethod()>
 Public Shared Sub MySimpleSub(MyCoolPassValue As String, Age As Integer)

    Debug.Print("passed string value = " & MyCoolPassValue & vbCrLf & "Age = " & Age.ToString)

 End Sub
[WebMethod()]
public static void MySimpleSub(string MyCoolPassValue, int Age)
{
   Debug.Print("passed string value = " + MyCoolPassValue + Constants.vbCrLf + "Age = " + Age.ToString());
}
Imports System.Web.Services
            var myvaluetopass = "this is some text to pass as variable";
            var age = 23;

            $.ajax({
                type: "POST",
                async: true,
                url: 'OnePicture.aspx/MySimpleSub',
                data: JSON.stringify({MyCoolPassValue: myvaluetopass, Age: age}),
                contentType: "application/json; charset=utf-8",
                datatype: "json"
            }
            );
        }