如何在Razor中的请求之间保留ICollection实体属性

时间:2013-12-07 19:53:01

标签: c# asp.net-mvc-4 razor

我正在处理ASP.NET MVC 4申请。我使用EF 5Code First。我有两个实体,1:N关系:

public class Menu
{
    //some properties
    public virtual ICollection<Document> Documents { get; set; }
}

public class Document
{
//some properties..
public int MenuID { get; set; }
public virtual Menu Menu { get; set; }
}

我使用Edit[HttpPost]方法[HttpGet]查看。当我通过这样的GET动作传递模型时:

                Menu model = unitOfWork.MenuRepository.GetById(Id);
                if (model != null)
                {
                    return View(model);
                }

一切都是对的,我可以看到该模型包含1个Documents,但是如果我只是尝试,那么在我的剃刀视图中:

@Html.HiddenFor(m => m.Documents)

然后当我将表单提交到Post操作时,我可以看到Documents属性为null。

如何保持Documents持久?

2 个答案:

答案 0 :(得分:2)

任何带有集合的东西都不会像你期望的那样呈现。你需要创建say,一个期望集合的displaytemplate,然后在HiddenFor中渲染文档的属性,或者如果你不想要一个显示模板,那么在相关的视图上做同样的事情。

例如,这是您需要做的:

@for(int counter = 0; counter < Model.Documents; counter++)
{
   @Html.HiddenFor(m => Model.Documents[counter].Id)
   @Html.HiddenFor(m => Model.Documents[counter].Title)
   // and so on
}

所以现在当你回发时,它拥有引擎绑定所需的所有属性,并将它传递给你的控制器方法并提供它。

答案 1 :(得分:1)

你看过生成的html吗?看看)

This回答和this one提供了解决方法。