Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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 如何在没有表单的情况下从$.post(…)方法传递guid或字符串?_Javascript_C#_Jquery_Ajax_Asp.net Mvc - Fatal编程技术网

Javascript 如何在没有表单的情况下从$.post(…)方法传递guid或字符串?

Javascript 如何在没有表单的情况下从$.post(…)方法传递guid或字符串?,javascript,c#,jquery,ajax,asp.net-mvc,Javascript,C#,Jquery,Ajax,Asp.net Mvc,我有以下方法 [HttpPost] public void DoStuff(string input) { ... } 以下脚本的调用到达方法,但输入参数为null。我已经测试了下面所有的变化,每次都有相同的结果 $.post("/DoStuff", "{input=bbbd861b-62ae-4eb5-9677-3aa2e354c583}", function() {}) $.post("/DoStuff", "{input:bbbd861b-62ae-4eb5-9677-3aa2e354c

我有以下方法

[HttpPost]
public void DoStuff(string input) { ... }
以下脚本的调用到达方法,但输入参数为null。我已经测试了下面所有的变化,每次都有相同的结果

$.post("/DoStuff", "{input=bbbd861b-62ae-4eb5-9677-3aa2e354c583}", function() {})
$.post("/DoStuff", "{input:bbbd861b-62ae-4eb5-9677-3aa2e354c583}", function() {})
$.post("/DoStuff", "{bbbd861b-62ae-4eb5-9677-3aa2e354c583}", function() {})
$.post("/DoStuff", "bbbd861b-62ae-4eb5-9677-3aa2e354c583", function() {})
在序列化复杂参数时使用的这种方法和类似的方法没有错误报告,但确实有效


不知道如何排除故障。

我建议您将键值对对象作为
json
传递:

var param = JSON.stringify({guid: 'bbbd861b-62ae-4eb5-9677-3aa2e354c583'});

$.post("/DoStuff", param, function() { ... }, 'json');
注意最后一个参数
'json'

属性名称必须反映参数名称(guid)。如果参数名称为
id
,则属性名称必须为
id
。这适用于所有类型。MVC以不区分大小写的方式工作(至少对于MVC4是这样),顺便说一句,这很酷

这样,框架将尝试将您的参数解析为您声明的类型

我认为GUID是有效的;如果该值不是有效的guid,框架将无法正确解析它。为便于测试,请确保

Guid.Parse(“bbbd861b-62ae-4eb5-9677-3aa2e354c583”)
将返回对象
Guid

如果声明
DoStuff(字符串输入){}
,请按如下方式传递键值对:

var param = JSON.stringify({input: 'bbbd861b-62ae-4eb5-9677-3aa2e354c583'});
$.post("/DoStuff", param, function() { ... }, 'json'); //json dataType

DoStuff
内部,您可以使用
Guid.parse(input)
将其解析为
Guid
,我建议您将键值对对象作为
json
传递:

var param = JSON.stringify({guid: 'bbbd861b-62ae-4eb5-9677-3aa2e354c583'});

$.post("/DoStuff", param, function() { ... }, 'json');
注意最后一个参数
'json'

属性名称必须反映参数名称(guid)。如果参数名称为
id
,则属性名称必须为
id
。这适用于所有类型。MVC以不区分大小写的方式工作(至少对于MVC4是这样),顺便说一句,这很酷

这样,框架将尝试将您的参数解析为您声明的类型

我认为GUID是有效的;如果该值不是有效的guid,框架将无法正确解析它。为便于测试,请确保

Guid.Parse(“bbbd861b-62ae-4eb5-9677-3aa2e354c583”)
将返回对象
Guid

如果声明
DoStuff(字符串输入){}
,请按如下方式传递键值对:

var param = JSON.stringify({input: 'bbbd861b-62ae-4eb5-9677-3aa2e354c583'});
$.post("/DoStuff", param, function() { ... }, 'json'); //json dataType

DoStuff
内部,您可以使用
Guid.parse(input)
将其解析为
Guid
。错误显示500个内部服务器错误。因此,服务器上的代码在某个地方失败了,因为您可能没有正确地传递值,或者服务器代码本身有缺陷。 执行此操作时,form.serialize()将生成(key:value)对的json结构

例如,“name”:“Konrad”,在服务器端,您可以使用

字符串名称=request.getParameter(“名称”)

但在另一种情况下,您只传递值而不是键。因此,上述语句在请求中找不到参数“name”。 这是我从您的问题中可以了解到的,可能是您可以调试服务器端代码以获得更好的清晰度

您需要发送,{“guid”:“无论您的值是什么”}


如果使用表单,最好使用serialize()。但是serialize()有一些限制,比如它不能根据您使用的标记从表单中序列化某些字段。

错误显示500个内部服务器错误。因此,服务器上的代码在某个地方失败了,因为您可能没有正确地传递值,或者服务器代码本身有缺陷。 执行此操作时,form.serialize()将生成(key:value)对的json结构

例如,“name”:“Konrad”,在服务器端,您可以使用

字符串名称=request.getParameter(“名称”)

但在另一种情况下,您只传递值而不是键。因此,上述语句在请求中找不到参数“name”。 这是我从您的问题中可以了解到的,可能是您可以调试服务器端代码以获得更好的清晰度

您需要发送,{“guid”:“无论您的值是什么”}


如果使用表单,最好使用serialize()。但是serialize()有一些限制,比如它不能根据您使用的标记从表单中序列化某些字段。

您可以使用JQuery读取POST方法

您可以像这样传递很多变量:

$.post( "/DoStuff", {input : "bbbd861b-62ae-4eb5-9677-3aa2e354c583" })
 .done(function( data ) {
   alert( "Data Loaded: " + data );
});
$guid= $_POST['input'];    // bbbd861b-62ae-4eb5-9677-3aa2e354c583
如果您有一个功能:

function doStuff(myVarStringGuid){
    $.post( "/DoStuff", {input: myVarStringGuid})
     .done(function( data ) {
       alert( "Data Loaded: " + data );
    });

}
在您的PHP上,可以获得如下变量:

$.post( "/DoStuff", {input : "bbbd861b-62ae-4eb5-9677-3aa2e354c583" })
 .done(function( data ) {
   alert( "Data Loaded: " + data );
});
$guid= $_POST['input'];    // bbbd861b-62ae-4eb5-9677-3aa2e354c583
如果是C#你可以得到这样的变量:

string guid = Request.Form["input"];
或者使用codeBehind上的Webmethod:

[WebMethod]
public static string DoStuff(string input)
{
    myInput = input;
}
但是,错误是当服务器可以访问您的页面时。。。 如果路由存在,可能是因为对象没有正确序列化

另外,对于使用JQuery发送表单,我使用插件非常容易使用Ajax发送表单:(我们获得了很多时间^^)


$('#myForm').ajaxForm(函数(){
警报(“收到Guid;-)”;
}); 

不要忘记,您可以使用检查AJAX请求…

您可以使用JQuery阅读POST方法

您可以像这样传递很多变量:

$.post( "/DoStuff", {input : "bbbd861b-62ae-4eb5-9677-3aa2e354c583" })
 .done(function( data ) {
   alert( "Data Loaded: " + data );
});
$guid= $_POST['input'];    // bbbd861b-62ae-4eb5-9677-3aa2e354c583
如果您有一个功能:

function doStuff(myVarStringGuid){
    $.post( "/DoStuff", {input: myVarStringGuid})
     .done(function( data ) {
       alert( "Data Loaded: " + data );
    });

}
在您的PHP上,可以获得如下变量:

$.post( "/DoStuff", {input : "bbbd861b-62ae-4eb5-9677-3aa2e354c583" })
 .done(function( data ) {
   alert( "Data Loaded: " + data );
});
$guid= $_POST['input'];    // bbbd861b-62ae-4eb5-9677-3aa2e354c583
如果是C#你可以得到这样的变量:

string guid = Request.Form["input"];
或者使用codeBehind上的Webmethod:

[WebMethod]
public static string DoStuff(string input)
{
    myInput = input;
}
但是,错误是当服务器可以访问您的页面时。。。 如果路由存在,可能是因为对象没有正确序列化

另外,对于使用JQuery发送表单,我使用插件非常容易使用Ajax发送表单:(我们获得了很多时间^^)


$('#myForm').ajaxForm(函数(){
警报(“收到Guid;-)”;
}); 

别忘了,您可以使用检查AJAX请求…

根据@phoenix的评论,我将回答并通过观察添加一些额外的值。正确的帖子URL如下所示。(注意:单个字符串,参数n)