C# Ajax发布到Asp.net MVC

C# Ajax发布到Asp.net MVC,c#,ajax,asp.net-mvc,ado.net,C#,Ajax,Asp.net Mvc,Ado.net,我想用AJAX在数据库中存储数据,我正在使用ADO.Net。但是,它不起作用 这是我的代码: 控制器 [HttpPost] public JsonResult InsertScore(ScoresQ scores) { db.ScoresQs.Add(scores); db.SaveChanges(); return Json("true&

我想用AJAX在数据库中存储数据,我正在使用ADO.Net。但是,它不起作用

这是我的代码:

控制器

 [HttpPost]
        public JsonResult InsertScore(ScoresQ scores)
        {
            db.ScoresQs.Add(scores);
            db.SaveChanges();
           
         
           return Json("true", JsonRequestBehavior.AllowGet);
        }
型号

    public partial class ScoresQ
    {   [Key]
        public int id { get; set; }
        private DateTime? month = null;
        public DateTime DateCreated
        {
            get
            {
                return this.month.HasValue
                   ? this.month.Value
                   : DateTime.Now;
            }

            set { this.month = value; }
        }
        public Nullable<int> status { get; set; }
        public Nullable<int> score { get; set; }
      
    }
public部分类分数sq
{[关键]
公共int id{get;set;}
私有日期时间?月=空;
已创建公共日期时间日期
{
得到
{
返回this.month.HasValue
?本月价值
:DateTime.Now;
}
设置{this.month=value;}
}
公共可空状态{get;set;}
公共可空分数{get;set;}
}
ajaxpost

js中的ajax。不在视野中

function showScore(data) {
    quiz.style.display = "none";
    scoreBlock.style.display = "block";
    scoreBlock.innerHTML = "<p> You scored " + score + " out of " + data.length + "</p>";
    console.log(score);
    if (score < 4) {
        scoreMessage.innerHTML = "<p>Not so good! Time for some revision.</p>";
    }
    else if (score < 8) {
        scoreMessage.innerHTML = "<p>Pretty good! But still room for improvement.</p>"
    }
    else {
        scoreMessage.innerHTML = "<p>Great work! You really know your birds!</p>"
    }

        $.ajax({
            type: "post",
            url: "Home/InsertScore",
            dataType: "json",
            data: { score: score, status: 1},
            success: function (data) {
                console.log("Success");
            },
            error: function () {
                console.log("error");
            }
    });
    scoreMessage.style.display = "block";
    quizAgain.style.display = "block";
}
函数showScore(数据){
quick.style.display=“无”;
scoreBlock.style.display=“block”;
scoreBlock.innerHTML=“您在“+data.length+”中得分“+score+”

”; 控制台日志(score); 如果(分数<4){ scoreMessage.innerHTML=“不太好!该做些修改了。

”; } 否则如果(分数<8){ scoreMessage.innerHTML=“很好!但仍有改进的余地。

” } 否则{ scoreMessage.innerHTML=“太棒了!你真的很了解你的鸟!

” } $.ajax({ 类型:“post”, url:“主页/插入分数”, 数据类型:“json”, 数据:{分数:分数,状态:1}, 成功:功能(数据){ 控制台日志(“成功”); }, 错误:函数(){ 控制台日志(“错误”); } }); scoreMessage.style.display=“block”; quizAgain.style.display=“block”; }
这里是错误

System.InvalidOperationException:“实体类型ScoresQ不是当前上下文模型的一部分。”


正如错误所示,问题在于将对象添加到数据库的代码中。共享该代码以供进一步分析。

您从JQuery发送的模型与Controller中的模型不符。 尝试以以下方式修改它:

 $.ajax({
            type: "post",
            url: "Home/InsertScore",
            dataType: "json",
            data: {model.month: month, model.DateCreated: date, model.score: score, model.status: 1},
            success: function (data) {
                console.log("Success");
            },
            error: function () {
                console.log("error");
            }
    });

我已经修复了错误,我只是像这样更改ajax代码

  $.ajax({
            type: "post",
            url: "Home/InsertScore",
            dataType: "json",
            data:
            {"score": score, "status": 1},        
            success: function (data) {
                console.log("Success");
            },
            error: function () {
                console.log("error");
            }
    });

在ajax中单独传递变量,需要作为对象传递

试试下面的代码

var scores = {score: score, status: 1};
$.ajax({
        type: "post",
        url: "Home/InsertScore",
        dataType: "json",
        data: scores ,
        success: function (data) {
            console.log("Success");
        },
        error: function () {
            console.log("error");
        }
});

此ajax代码包含在.js中,而不是视图中。因此,它无法在控制器中检索模型。当我尝试像您的建议那样更改代码时,js函数不起作用。我的意思是,您使用ajax发送给控制器的JSON对象必须与您的域模型具有相同的字段。否则控制器无法将JSON对象解析为域模型对象。