我有这个json array-ish变量,它从表中获取值:
var data = { "Model": [] };
$(".student-grade-data-row").each(function () {
data.Model.push({
'subjectId' : currentSubjectId,
'studentId': $(this).attr('id'),
'grade1' : $(this).find(".grade-select").val(),
'mult' : $(this).find(".mult-select").val(),
'subject': $(this).find(".topic-input").val(),
});
});
它被设计成类似于名为grade
public partial class grade
{
public int id { get; set; } //auto-set
public int subjectId { get; set; }
public string studentId { get; set; }
public int grade1 { get; set; }
public int mult { get; set; }
public string subject { get; set; }
public System.DateTime date { get; set; } //auto-set
}
现在,在完美的世界中,我希望将数据变量中的值发送到我的控制器中,如下所示:
$.ajax({
url: '/Ajax/SendGrades',
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
success: function (dt) {
console.log(dt);
}
});
然后我可以把它拿起来,并将其序列化为适当的对象列表。
问题是我甚至无法看到我发送给控制器的真实情况以及如何将其链接到对象。
我尝试让函数采用List<grade> Model
类型的agrument,但它会一直告诉我值为null。
我尝试使用一些基本的序列化,但无法使其工作。代码
public ActionResult SendGrades(JsonResult Model)
{
List<grade> g = new List<grade>();
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(grade));
g = (List<grade>)serializer.ReadObject(Model);
return Content("Hi");
}
给我一个错误说
无法从System.Web.Mvc.JsonResult转换为System.IO.Stream
这样做的正确方法是什么,以便我以后可以安全地将值存储在我的数据库中?
我对这类工作比较陌生,所以我为任何noob-ism道歉。 任何帮助都会很棒。
答案 0 :(得分:2)
你需要包含ajax选项
type: 'POST'
默认情况下,其GET
没有正文,因此设置contentType
毫无意义,DefaultModelBinder
将不会使用JsonValueProvider
(GET
},数据的格式必须是data: { [0]subjectId: value, [0]studentId: value, [1]subjectId: value, [0]studentId: value, ....etc }
- 即索引属性名称)
完整的代码需要
$.ajax({
url: '/Ajax/SendGrades',
type: 'POST', // add this
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
success: function (dt) {
console.log(dt);
}
});
控制器方法
public ActionResult SendGrades(List<grade> model)
答案 1 :(得分:0)
class Models
{
public List<grade> Model{get; set;}
}
并像这样更改你的方法
public ActionResult SendGrades(Models models)
{
List<grade> g = models.Model;
//then write your logic here
}
答案 2 :(得分:0)
您的模型应该像
public partial class grade
{
public int id { get; set; } //auto-set
public int subjectId { get; set; }
public string studentId { get; set; }
public int grade1 { get; set; }
public int mult { get; set; }
public string subject { get; set; }
public System.DateTime date { get; set; } //auto-set
}
当您向服务器发送数据时使用data.Model
分配数据,因为您将值设置为模型
$.ajax({
url: '/Ajax/SendGrades',
type: "POST",
data: data.Model, //try to change it in ur code first if not work use jquery.post
contentType: "application/json; charset=utf-8",
success: function (dt) {
console.log(dt);
}
});
或使用Jquery Post
$.post('/Ajax/SendGrades', data.Model,
function(data){
console.log(data);
});
和控制器
public ActionResult SendGrades(List<grade> Model)
{
//then write your logic here
}