如何使用$ .Ajax方法将json从视图传递到控制器?
问题描述:
我想从视图到控制器使用$ .ajax方法接收json对象,但我不知道为什么控制器中的接收对象显示空数据。
这是我的代码。
$("#Save").click(function (e) {
$.ajax({ url: "Home/Save",
type: "POST",
datatype:'json',
data: ({movies:movies})
});
});
其中电影是JavaScript的数组,它包含
({
Name:"DDLJ",Stars:"SRK",Director:"Yashraj",Year:"2012"
}, {Name:"K3G",Stars:"SRK",Director:"Karan",Year:"2010"}
)
和我的控制器的代码是:
public string Save (List<MovieDB> movies)
{
return "";
}
其中MovieDB是具有属性我的模型类
public class MoviesDB
{
//public int MoviesID { get; set; }
public string Name { get; set; }
public string Stars { get; set; }
public string Director { get; set; }
public DateTime Year { get; set; }
}
请su让我有更好的方法来从视图到控制器接收json数据。
Actully我尝试从视图发送JavaScript的数组对象在我的阵列码是
<script type="text/javascript">
var cnt = 1;
var cnt2 = 1;
var i;
var movies = [];
movies.push({ Name: $("#txtMovieName").val(), Stars: $("#txtStarCasts").val(), Director: $("#txtDirector").val(), Year: $("#txtYear").val(), Index: cnt++ });
$("#modelTable").empty();
$("#modelTemplate").tmpl(movies).appendTo($("#modelTable"));
$("#txtMovieName").val("");
$("#txtStarCasts").val("");
$("#txtDirector").val("");
$("#txtYear").val("");
$("#txtMovieName").focus();
e.preventDefault();
});
$("#Save").click(function (e) {
//var jm = $.toJSON(movies);
$.ajax({ url: "Home/Save",
type: "POST",
data: ({movies:movies})
// contentType: 'application/json; charset=utf-8'
});
});
</script>
现在我想发送电影JavaScript的数组对象使用保存()控制器的操作方法控制操作方法任何方式像JSON或其他请给我一些建议...
答
List<xyztype> lstid = new JavaScriptSerializer().Deserialize<List<xyztype>>(IDlist);
为我工作
这里xyztype是我收集类类型和IDLIST是我的JSON从视图objectstring使用javascriptserializer()。解串器<到控制器的操作方法
>我们可以转换JSON字符串到我们的定制或系统数据类型的对象
例如:
List<string> lstid = new JavaScriptSerializer().Deserialize<List<string>>(IDlist);
答
这不是一个正确的JSON。您可以检查这在JSONLint
这里是正确的JSON:
[
{
"Name": "DDLJ",
"Stars": "SRK",
"Director": "Yashraj",
"Year": "2012"
},
{
"Name": "K3G",
"Stars": "SRK",
"Director": "Karan",
"Year": "2010"
}
]
如果仍存在错误,让我知道。
答
也许这是一个更好的答案,如果你想在发布后将你的数据存入你的控制器。
//For going to your view.
public ActionResult Create()
{
MoviesDB model = new MoviesDB();
return View("Create", model);
}
[HttpPost]
public ActionResult Create(MoviesDB model)
{
if (ModelState.IsValid)
{
//Here you can use your model param
//with the filled in values of your view.
return RedirectToAction("Index");
//when everything works fine, go to this view.
}
else
{
return RedirectToAction("Index");
//when there is a problem, go to this view.
}
return View("Index");
}
你不需要jQuery从你的视图中使用你的数据。
我已经发布了一个答案,但是当我再次阅读你的问题时,我想我的答案是不正确的。 提交后,您是否将视图中的数据从您的视图中获取到控制器?因为那很容易解决你的问题。 – Sllix 2012-07-05 12:57:48