我正在将我的应用程序从webforms转换为mvc,目前我处于设计问题(我只是不知道如何在mvc中执行此操作)。
基本上我的模型会是这样的:
public class DamagedItem
{
public Int32 LoanId {get;set;}
public String IdentityCode {get;set;}
public virtual ICollection<DamagedItems> DamagedItems {get;set;}
}
在我的控制器中,我想这样做:
public ActionResult Add(DamagedItem damagedItem)
{
//Do update logic here
}
然后在我看来,我可以根据需要添加到ICollection。 但是,我不能这样做,因为如果我尝试从我的控制器访问ICollection它是空的。
这是我想要做的时间的图像:
我只是不知道如何在我的视图中列出它,如何将这些项目添加到我的ICollection中,更新视图然后当我需要保存时我可以访问我从控制器添加的内容?
谢谢, 尼克
编辑:
我正在考虑在视图中使用partial,并使用ajax将下半部分的所有逻辑存储在会话变量中,但我不希望它依赖于ajax。
答案 0 :(得分:0)
我能看到的只有Damaged Item缺少一个带Collection值的构造函数;
public class DamagedItem
{
public DamagedItem()
{
DamagedItems = new List<DamagedItems>();
DamagedItems.Add(new DamagedItem { Description = "Damaged" } );
}
public Int32 LoanId {get;set;}
public String IdentityCode {get;set;}
public virtual ICollection<DamagedItems> DamagedItems {get;set;}
}
答案 1 :(得分:0)
最好分开:你应该有2个动作,产生2个视图。
你应该有LoadInformationModel classe:
public class LoadInformationModel
{
public string StudentCode { get; set; }
public string FirstName { get; set; }
// etc..
public ICollection<Damage> Type { get; set; }
}
相应的行动
[HttpGet]
public ActionResult LoanInformation(int id)
{
var loanInfo = // get data by given id..
var model = new LoadInformationModel {
StudentCode = loanInfo.StudentCode,
// etc
Type = new List<Damage> { new Damage { Value = "Damaged"}, new Damage { Value = "Damaged Again" }
}
return View(model);
}
以及RepairDataModel类
公共类RepairDataModel { public bool CoveredByWarranty {get;组; } public ICollection Status {get;组; } }
相应的行动
[HttpGet]
public ActionResult Repair(int id)
{
// logic
return View(model);
}
您的任务是创建Post处理程序,将数据保存到DB然后表单提交
[HttpPost]
public ActionResult(RepairDataModel model)
{
// save to db
return View();
}
Index()方法返回的视图可以像
一样创建@Html.RenderAction("LoanInformation")
@Html.RenderAction("Repair")
其余取决于你的设计和想象力。我希望这会给你指路。