我想添加系列,其中包含许多成员,并且可以拥有多个住宅。我正在尝试创建一个表单并使用其他对象的集合提交对象系列。我尝试了一些东西,但我只能将一个对象传递给控制器而不是集合。我该怎么办?
我应该制作成员并容纳部分观点并在视图中呈现它们吗?
有没有办法用JavaScript收集所有内容然后将整个系列对象传递给控制器?
我正在使用MVC 5和Entity Framework。我无法解决这个问题。任何帮助表示赞赏。
这是一个对象的例子
public class family
{
public int id { get; set; }
public int familyname { get; set; }
public List<member> members { get; set; }
public List<house> houses { get; set; }
}
public class member
{
public int id { get; set; }
public string name { get; set; }
public DateTime birthdate { get; set; }
//foreign key
public family Family { get; set; }
public int FamilyID { get; set; }
}
public class house
{
public int id { get; set; }
public int number { get; set; }
public string address { get; set; }
//foreign key
public family Family { get; set; }
public int FamilyID { get; set; }
}
public class FamilyViewModel
{
public family Family { get; set; }
public member Member { get; set; }
public house House { get; set;}
public List<member> Members { get; set; } //??
public List<house> Houses { get; set; } //??
}
查看
@model WebApp.ViewModels.FamilyViewModel
@{
ViewBag.Title = "New";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Family</h2>
@using (Html.BeginForm("Submit", "Family"))
{
<div class="form-group">
@Html.LabelFor(m => m.Family.familyname)
@Html.TextBoxFor(m => m.Family.familyname, new { @class = "form-control"})
</div>
<div id="member">
</div>
<div id="house">
</div>
}
控制器
[HttpPost]
public ActionResult Submit(FamilyViewModel CompleteFamily)
{
//What to do here?
return View();
}
答案 0 :(得分:0)
首先,请在家庭班级内将 familyname 的数据类型更改为 string 。 FamilyViewModel 与您的系列类相同。
目前,我正在开发具有此类功能的MVC项目。在这种情况下,请参阅首先,您需要为系列保存数据。保存时,成员和房屋将 null 。 例如,第一次保存数据时,假设此处的family id为1,familyname为John,member和houses为null。 希望你明白这一点。
您已经为会员和住宅渲染了两个局部视图。在主视图中提供两个按钮(这只是您的家庭视图)。 1表示添加成员,另1表示添加成员。因此,当用户单击“添加成员”时,会显示一个弹出模式或任何您想要的内容,用户可以在其中提交家庭成员。同样适用于房屋。
然后在保存家庭成员时(我的意思是当他们点击成员弹出模式中的SAVE按钮时),只需调用jquery / ajax函数并将数据发布到控制器方法,包括当前的系列ID 。
请参阅我的吼叫代码,
//这将在成员的弹出模式中,
<div class="row with-forms">
<div class="col-md-12">
<h5>Member Name</h5>
<input class="search-field" type="text" name="name" id="memberName" />
</div>
<div class="col-md-12">
<h5>Birth Date</h5>
<input class="search-field" type="text" name="DOB" id="memberDOB" />
</div>
<div class="col-md-12">
<input class="btn btn-success" type="button" id="saveMembers" />
</div>
</div>
//我的jquery / ajax代码来保存成员数据
$("#saveMembers").click(function () {
var membersData = [{
name: $("#memberName").val(),
birthdate: $("#memberDOB").val()
})
var CompleteFamily = {
id: $("#hiddenFamilyId").val(), //keep your familyId in a
//hidden field in same page
members: membersData,
//houses: houseData //similarly u can add house data here
}
$.ajax({
"url": "/yourControllerName/FamilyViewModel",
"type": "Post",
"data": CompleteFamily,
success: function (data) {
//show a message that member added to this family
}
})
多数民众赞成。然后,您可以在Action方法中保存数据。像这样你可以用相同的ajax方法为同一个familyId发布房屋数据。
在您的控制器操作方法中,您可以像这样进行验证,
public ActionResult Submit(FamilyViewModel CompleteFamily)
{
if(FamilyViewModel.id == 0)
// This is a new entry to family.
// Return your new familyId in a viewBag and keep that in a hidden field
//in your view HTML
else
{
//You just need to update the family. I mean, here you are adding
//members and houses to the respective family Id.
}
}
请注意,不要忘记在viewBag或您想要的任何内容中返回您的familyId,并将其保存在HTML中的隐藏字段中。因此,只有您可以将成员/房屋添加到相应的Id。就像我在上面的ajax中传递数据一样。
例如,您的familyId在HTML中如下,
<input type="hidden" id="hiddenFamilyId" value="@ViewBag.familyId"/>
希望它能解决你的问题。干杯...