查看和ICollection问题

时间:2011-07-11 15:09:50

标签: c# asp.net-mvc-3

我正在将我的应用程序从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它是空的。

这是我想要做的时间的图像: enter image description here

我只是不知道如何在我的视图中列出它,如何将这些项目添加到我的ICollection中,更新视图然后当我需要保存时我可以访问我从控制器添加的内容?

谢谢, 尼克

编辑:


我正在考虑在视图中使用partial,并使用ajax将下半部分的所有逻辑存储在会话变量中,但我不希望它依赖于ajax。

2 个答案:

答案 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")

其余取决于你的设计和想象力。我希望这会给你指路。