用jquery发布的数据发布到Asp.net 4 Mvc 2为null

时间:2014-10-29 18:47:09

标签: c# jquery asp.net asp.net-mvc

我正在使用jquery 1.8将数据发布到ASP.Net 4 MVC 2,就像这样

PostData('Home/Login',{ "username": $("#username").val(),"password": $("#password").val()})

   function PostData(url, data) {
        $.ajax({
            url: url,
            data:data,
            type: 'POST',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            Success:successFunction, Error: ErrorFunction
        });
    };

我的模特

namespace FmsMvc.Models
{
    public class UsersModel
    {
        public int UserID { get; set; }
        public string Role { get; set; }
        public string Email { get; set; }
        public DateTime ts { get; set; }
        public string Username { get; set; }
       public string Password { get; set; }
    }

}

我的控制器

 [HttpPost]
 public JsonResult Login(UsersModel u)
 {
     if (doSomething(Prop1, Prop2)
         return Json(null); // Success
     return Json(new { Status:'success',Msg:" Your username"+u.username });
 }

我的控制器无法获取数据。它在调试时变为null。

我做错了什么?

注意

我删除了Scripts文件夹中的所有javascript,因为我使用的是自定义脚本

4 个答案:

答案 0 :(得分:1)

你在POST之前尝试过JSON.stringify吗?

function PostData(url, data) {
    $.ajax({
        url: url,
        data:JSON.stringify(data),
        type: 'POST',
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        Success:successFunction, Error: ErrorFunction
    });
};

答案 1 :(得分:1)

试试这样:

var data = { "username": $("#username").val(),
             "password": $("#password").val()
           };
PostData('Home/Login',JSON.stringify(data));

答案 2 :(得分:1)

您可以使用JQuery .post()方法为您解析值

var url = '@Url.Action("Login", "Home")'; // beter to use this rather than hardcoding
var userName = `$("#username").val();
var password = $("#password").val();
$.post(url, { Username: userName, Password: password }, function(result) {
  // do something with the result you returned from the action method
  alert(result.Msg);
});

注意,只会在模型中设置属性UsernamePassword。其他属性将是其默认值。

答案 3 :(得分:0)

经过多次调试,我找到了罪魁祸首

在上面我的ajax函数中我有这两行

contentType: 'application/json; charset=utf-8',
dataType:'json',

不知何故,这不应该。当我提交带有两条线的表格时,这就是我在chrome dev中看到的

bad request

但是当我删除行contentType: 'application/json; charset=utf-8'时,现在$ .ajax

$.ajax({ // create an AJAX call...
        type: 'post', // GET or POST
        url: url, // the file to call
        dataType:'json',
        data: data, // get the form data
        Success:successFunction, Error: ErrorFunction
     }); 

当我在提交后查看chrome dev时,我看到了这个,之前不存在

good resp

我不知道为什么会这样,我会尝试在其他浏览器中查看是否一切正常