我试图通过几个_PartialView向我的控制器发送在我的视图中表示的几个模型。 例如:我的主页面包含对象模型的字段,但它还包含一个包含对象ModelDetail字段的部分视图。
我希望控制器中的操作如下:
public ActionResult SaveAll(Model model, ModelDetail detail)
{
........
}
所以我做了这样的功能:
var MainInfo = $('form#MainInfo').serialize();
var DetailInfo = $('#Details :input').serialize();
var dataPost = { model: MainInfo , modelDetail: DetailInfo };
$.post(saveCompleteUrl, dataPost).sucess() {
}
...........
但它不起作用,两个参数在Controller中都为空。而且我无法初始化对象,因为在Details中我有一个包含n个对象的集合......
无论如何要做这项工作还是我需要分开行动?一个保存主模型第二个保存详细信息。我知道这个解决方案有效,但我宁愿使用另一个。
编辑:2015/06/29: 我尝试了很多不同的方法来做到这一点,但我从未成功,对象内的数据总是为空,我能让它工作的唯一方法就是:
var litigationMainInfo = $('form#MainLitigationInfo').serialize();
var litigationDetailInfo = $('#litigationDetails :input').serialize();
$.post(saveUrl, litigationMainInfo)
.success(function (data) {
var actionResult = data.Result;
if (actionResult.Success) {
$.post(saveDetailsUrl, litigationDetailInfo)
.success ....
带
SaveUrl = '@Url.Action("Save", "Litigation")',"Save"
saveDetailsUrl = '@Url.Action("SaveDetails", "Litigation")',"Save"
和
[AjaxOnly]
public ActionResult Save(EditModel model){...}
[AjaxOnly]
public ActionResult SaveDetails(DetailEditModel model){...}
但是这个:
public ActionResult Save(EditViewModel m){...}
public class EditViewModel
{
EditModel model;
DetailEditModel detailModel;
}
var MainInfo = $('form#MainInfo').serialize();
var DetailInfo = $('#Details :input').serialize();
var dataPost = { model: MainInfo , detailModel: DetailInfo };
$.post(saveCompleteUrl, dataPost).sucess() {
}
我使用的方法签名是:
public ActionResult SaveComplete(ViewModel model){...}
public ActionResult SaveComplete(EditModel editModel, EditDetailModel detailsModel){...}
奇怪的是,EditModel为null,但DetailEditModel不是。 DetailEditModel中的值设置为默认值(对于Ids为0,对于字符串为null)
我不明白,当我两次打电话时,这是"工作"但是只要我想在同一个电话中发送这两个模型就行不通。
顺便说一句,cshtml主页由2个PartialViews组成。第一个是绑定到EditModel。第二个也绑定到EditModel,因为我使用对象的id来获取细节,但第二个局部视图是一个像这样定义的标签条(KendoUI):
@model FileEditModel
@Html.HiddenFor(x => x.Id)
@(Html.Kendo().TabStrip()
.Name("tabStrip")
.Items(tabStrip => {
tabStrip.Add().Text("Details")
.Selected(true)
.LoadContentFrom("GetDetails", "Litigation", new { LitigationFileId = Model.Id });
这是GetDetails方法:
public ActionResult GetDetails(int Id)
{
if (LitigationFileId != 0)
{
DetailEditModel model = LoadData(Id);
return PartialView("_details", model);
}
else
{
DetailEditModel model = new DetailEditModel();
return PartialView("_details", model);
}
}
答案 0 :(得分:0)
我的建议是创建一个包含每个类的属性的视图模型类
public class ViewModel
{
public Model Model;
public ModelDetail ModelDetail;
}
public ActionResult SaveAll(ViewModel viewModel)
{
........
}
您的ajax调用应该与此服务器端更改完美配合