Javascript 将json传递到MVC控制器
我已经看过很多关于SO的帖子,考虑到这个话题,尽管应用解决方案对我来说不起作用,我现在很困惑。我错过了什么 请考虑我是NoOB AT。JS的东西。< /P> 因此,我使用此JS从动态创建的表单元素中获取我的值,并尝试发布它: 编辑12:21:我得到了这个脚本,它应该将表单中的每个元素解析为类似json的定制数组。但我仍然得到空引用。知道怎么弄吗?Javascript 将json传递到MVC控制器,javascript,json,ajax,asp.net-mvc,Javascript,Json,Ajax,Asp.net Mvc,我已经看过很多关于SO的帖子,考虑到这个话题,尽管应用解决方案对我来说不起作用,我现在很困惑。我错过了什么 请考虑我是NoOB AT。JS的东西。< /P> 因此,我使用此JS从动态创建的表单元素中获取我的值,并尝试发布它: 编辑12:21:我得到了这个脚本,它应该将表单中的每个元素解析为类似json的定制数组。但我仍然得到空引用。知道怎么弄吗? var getValues = function (myForm) { var array = []; var parser
var getValues = function (myForm) {
var array = [];
var parser;
$("formElement").each( function (i, elem) {
parser.empty()
parser = {
Id: $(elem,"#Id ").val(),
someOption: $(elem, "#someOption ").val(),
someText: $(elem, "#someText ").val(),
someNumber: $(elem, "#someNumber ").val()
}
array.push(parser);
});
console.log(array);
$.ajax({
type: "POST",
url: 'angus',
traditional: true,
data: {json: array },
success: function (data) {
$("#getData").empty();
$("#getData").append(array);
}
});
};
我在日志中看到:
(像i、i+1、i+2、i+3这样的索引对象与viewmodels匹配-是吗?我对这些原型和函数的感觉很复杂-是什么?)
在我的控制器操作中,我得到空异常:
[HttpPost]
public ActionResult angus(IEnumerable<TrashViewModel> json)
{
return View(json.ToList());
}
我让表单HTML属性名称与viemodel类的名称匹配
编辑:
html:
多达杰·普兹西斯克
罗扎吉。。。
2.
测试
2.
3.
@*tutaj beda dodane opcje*@
附加的html:
var strVar = "";
strVar += "<div class=\"formElement row\">";
strVar += " <input type=\"hidden\" name=\"Id\" value=\" "+ $scope.counter +"\"\/>";
strVar += " <div class=\"col-md-2\">";
strVar += " <select name=\"someOption\" class=\"optns form-group col-md-12\" ng-model=\"user.class\">";
strVar += " <option selected value=\"1\"> Rodzaj... <\/option>";
strVar += " <option value=\"test\">2<\/option>";
strVar += " <option value=\"2\">test<\/option>";
strVar += " <option value=\"2\">2<\/option>";
strVar += " <option value=\"3\">3<\/option>";
strVar += " @*tutaj beda dodane opcje*@";
strVar += " <\/select>";
strVar += " <\/div>";
strVar += " <div class=\"col-md-1\">";
strVar += " <input name=\"someNumber\" class=\"form-group col-md-12\" type=\"number\" ng-model=\"user.number\" value=\"\" text=\"Ilość...\" \/><br \/>";
strVar += " <\/div>";
strVar += " <div class=\"col-md-9\">";
strVar += " <input name=\"someText\" class=\"form-group col-md-12\" type=\"text\" ng-model=\"user.text\" value=\"\" text=\"Uwagi...\" \/><br \/>";
strVar += " <\/div>";
strVar += " <\/div>";
var strVar=”“;
strVar+=“”;
strVar+=“”;
strVar+=“”;
strVar+=“”;
strVar+=“Rodzaj…”;
strVar+=“2”;
strVar+=“测试”;
strVar+=“2”;
strVar+=“3”;
strVar+=“@*图塔吉·贝达·多丹opcje*@”;
strVar+=“”;
strVar+=“”;
strVar+=“”;
strVar+=“
”;
strVar+=“”;
strVar+=“”;
strVar+=“
”;
strVar+=“”;
strVar+=“”;
我最终得到了null异常,其他帖子认为这是因为viemodel类与序列化对象不匹配。现在不知道该怎么办
谢谢大家! 尝试更换
var parsed = $(myForm).serializeArray();
与
然后将其传递给提交者
JSON.stringify(parameters)
试着替换
var parsed = $(myForm).serializeArray();
与
然后将其传递给提交者
JSON.stringify(parameters)
在您的JavaScript代码中,有三件事向我跳了出来:
data: $(myform).serialize()
在控制器上,只需将动作上的参数设置为TrashViewModel对象。请注意,它是单个对象,不是可枚举的
public ActionResult Angus(TrashViewModel form)
{
// do something
}
如果要使用.serializeArray(),则需要创建具有名称和值属性的模型对象,以便模型绑定器能够正确解析参数
// JavaScript
data: $(myform).serializeArray()
// Controller
public class NameValueModel
{
public string Name { get; set; }
public string Value { get; set; }
}
public ActionResult Angus(NameValueModel[] form)
{
// do something
}
在您的JavaScript代码中,有三件事向我跳了出来:
data: $(myform).serialize()
在控制器上,只需将动作上的参数设置为TrashViewModel对象。请注意,它是单个对象,不是可枚举的
public ActionResult Angus(TrashViewModel form)
{
// do something
}
如果要使用.serializeArray(),则需要创建具有名称和值属性的模型对象,以便模型绑定器能够正确解析参数
// JavaScript
data: $(myform).serializeArray()
// Controller
public class NameValueModel
{
public string Name { get; set; }
public string Value { get; set; }
}
public ActionResult Angus(NameValueModel[] form)
{
// do something
}
我对结果不是100%满意,因为我仍然需要在服务器端解析json字符串。我想我很快就会做问答,这样其他人就不用花一周的时间来做这样的事情了。感谢:
- @斯蒂芬穆克
- @埃米尔
- @杰夫M
var array = [];
var parser;
$(".formElement").each( function (i, elem) {
//parser.empty()
parser = {
Id: $("#Id", $(this)).val(),
someOption: $("#someOption", $(this)).val(),
someText: $("#someText", $(this)).val(),
someNumber: $("#someNumber", $(this)).val()
};
console.log(parser);
array.push(parser);
});
console.log(array);
$.ajax({
type: "POST",
url: 'angus',
traditional: true,
data: { json: JSON.stringify(array) },
success: function (data) {
$("#getData").empty();
$("#getData").append(array);
}
});
控制器:
(不要介意逻辑,因为除了在调试期间提供信息外,它在这里没有任何用处)
最重要的是给字符串类型作为参数;我100%确信我的json从复杂类型的viewmodel中反弹了出来
[HttpPost]
public ActionResult angus(string json)
{
var check = json.ToString() == null;
return RedirectToAction("ErrorAction");
}
我对结果不是100%满意,因为我仍然需要在服务器端解析json字符串。我想我很快就会做问答,这样其他人就不用花一周的时间来做这样的事情了。感谢:
- @斯蒂芬穆克
- @埃米尔
- @杰夫M
var array = [];
var parser;
$(".formElement").each( function (i, elem) {
//parser.empty()
parser = {
Id: $("#Id", $(this)).val(),
someOption: $("#someOption", $(this)).val(),
someText: $("#someText", $(this)).val(),
someNumber: $("#someNumber", $(this)).val()
};
console.log(parser);
array.push(parser);
});
console.log(array);
$.ajax({
type: "POST",
url: 'angus',
traditional: true,
data: { json: JSON.stringify(array) },
success: function (data) {
$("#getData").empty();
$("#getData").append(array);
}
});
控制器:
(不要介意逻辑,因为除了在调试期间提供信息外,它在这里没有任何用处)
最重要的是给字符串类型作为参数;我100%确信我的json从复杂类型的viewmodel中反弹了出来
[HttpPost]
public ActionResult angus(string json)
{
var check = json.ToString() == null;
return RedirectToAction("ErrorAction");
}
为了发布数组,需要对数据进行字符串化并设置
contentType
选项。您需要修改ajax代码
$.ajax({
type: 'POST',
url: '@Url.Action("angus")', // do not hard code url's
contentType: "application/json; charset=utf-8",
data: JSON.stringify({ model: array }),
success: function (data) {
和控制器
[HttpPost]
public ActionResult angus(IEnumerable<TrashViewModel> model)
[HttpPost]
公共行动结果