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)