【发布时间】:2017-06-07 13:14:57
【问题描述】:
我有这个从表中获取值的 json 数组变量:
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 的 MVC 类
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 变量中的值发送到我的控制器,如下所示:
$.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
这样做的正确方法是什么,以便我以后可以安全地将值存储在我的数据库中?
我对这种类型的工作相当陌生,所以对于任何菜鸟主义,我深表歉意。 任何帮助在这里都会很棒。
【问题讨论】:
-
将方法更改为
public ActionResult SendGrades(List<grade> Model)(并始终使用url: 'Url.Action("SendGrades", "Ajax")',生成正确的url)。您还需要设置contentType: "application/json; charset=utf-8", -
此方法在测试时声称返回空变量。如果我运行 return content(Model.First().subject) 我会得到一个 NULL 错误。我正在使用单独的 js 文件来发送值。这可以使用
Url.Action吗? -
你看到编辑的评论了吗(关于设置
contentType选项)? -
是的。我现在将编辑答案
-
你不能在外部文件中使用剃须刀代码,但你可以将它传递给 js 文件,例如只需使用
var url = '@Url.Action(..)';在主视图中创建一个全局变量,或者使用data-url="@Url.Action(..)"在触发ajax 的元素中分配它
标签: c# json ajax asp.net-mvc asp.net-mvc-4