我想在按钮点击时发送一个字符串化的Json对象。我正在尝试如下...按下按钮我可以调用所需的Action方法,但是它正在传递null
参数 ..
MemberLogin.cshtml
<input type="button" value="» Continue" id="btnLogin" onclick="PostData();">
<script type="text/javascript">
function PostData() {
var ObjLogInDto = new Object();
ObjLogInDto.UserName = $("#txtUserName").val();
ObjLogInDto.Password = $("#txtMemberPassword").val();
ObjLogInDto.CaptchaText = $("#txtCaptcha").val();
var StringifiedData = JSON.stringify(ObjLogInDto);
$.ajax({
url: '@Url.Content("~/Member/MemberLogin/MemberLogin")',
async: false,
type: "POST",
data: StringifiedData,
dataType: "json",
contentType: "application/json; charset=utf-8",
error: function (jqXHR, textStatus, errorThrown) {
alert("ERROR:" + jqXHR + "-" + textStatus + "-" + errorThrown);
},
success: function (data, textStatus, jqXHR) {
alert("SUCCESS:" + data.Message);
}
});
}
</script>
行动方法
[HttpPost]
public ActionResult MemberLogin(string JsonStr)
{
var ObjMemberLoginDto =
new JavaScriptSerializer().Deserialize<MemberLoginDto>(JsonStr);
}
我为此JsonStr
获取null。
注意:我已经包含了Json2.js。 ajax调用中的StringifiedData
包含字符串化数据。如
{"UserName":"TEST13361","Password":"testpswd","CaptchaText":"gz8h4"}
答案 0 :(得分:1)
改变这个:
data: StringifiedData,
到此:
data: {JsonStr: StringifiedData},
您需要传递一个包含JsonStr
作为键名称且StringifiedData
作为值的对象,因为在后端代码中期望请求中的参数名为JsonStr
,但它不可用那就是null
。
答案 1 :(得分:1)
'contentType'属性存在问题。 删除contentType,以便将其设置为默认值或设置正确的内容类型。 您可以在内容类型here
上找到更多信息同样如@Jai建议的那样,你需要将ajax(...)设置中的“data”包装成一个键值对,其键值与action方法的参数名称相同,用于正确的模态绑定。 / p>
答案 2 :(得分:1)
MVC控制器发送的内容并不清楚。您可以使用两种方式:
将命名参数发送到控制器
喜欢这个 js :
$.ajax({
url: '@Url.Content("~/Member/MemberLogin/MemberLogin")',
type: "POST",
data: { UserName : $("#txtUserName").val(), /*And more*/},
//something else
});
然后在 controller :
[HttpPost]
public ActionResult MemberLogin(string UserName, string Password, string CaptchaText) {
//Operations here
}
将定义的对象发送到控制器
模型:
public class Test
{
public string UserName;
public string Password;
public string CaptchaText;
}
控制器:
[HttpPost]
public ActionResult MemberLogin(Test test) {
//Operations here based on test
}
最后在 js :
var _data = {
UserName: $("#txtUserName").val(),
Password: $("#txtMemberPassword").val(),
CaptchaText: $("#txtCaptcha").val()
};
$.ajax({
url: '@Url.Content("~/Member/MemberLogin/MemberLogin")',
type: "POST",
dataType: "json",
data: _data,
//something else
});
如果您坚持使用字符串化的json ,请查看如何在mvc4中将Json字符串发送到控制器并反序列化json enter link description here