在控制器中访问组合模型的零件

问题描述:

这可能很难解释,但请耐心等待......所以,我有一个模型结合了两种不同的模型,以便我可以在一个视图中使用两种数据:合并:在控制器中访问组合模型的零件

public class EventFullModel 
{ 
    public AccessListModel AccessPointsList; 
    public EventListModel EventList; 
} 

访问列表型号:

public class AccessListModel 
{ 
    public int Id { get; set; } 
    public List<SelectListItem> AccessPoints { get; set; } 
} 

事件列表型号:

public class EventListModel 
{ 
    public int Id { get; set; } 
    public virtual string T { get; set; } 
    public virtual string C { get; set; } 
    public virtual string M { get; set; } 
    public virtual string L { get; set; } 
    public List<SelectListItem> Events { get; set; } 
    public IEnumerable<SelectListItem> Skills { get; set; } 
} 

我一个m目前得到一个错误,我相信这是因为这个视图的控制器方法最初只返回EventListModel,而现在它试图返回EventFullModel,因为我改变了继承:Inherits="System.Web.Mvc.ViewPage<Cred.Web.Models.EventFullModel>"。所以在这一点上,我试图编辑控制器,以确保它试图返回视图的正确模型。我的问题是这样的:

这是一个GET操作方法:public ActionResult Index(int? id) 原来,控制器与EventListModel只工作:

EventListModel model; 
model = new EventListModel { 
Id = 0, 
T = "", 
C = "", 
M = "", 
L = HttpContext.Session["L"].IsNull() ? "" : HttpContext.Session["L"].ToString(), 
Events = new List<SelectListItem>(), 
Skills = 
     DbQueryExecutor.ExecuteQuery(new SkillsList()).Select(e => new SelectListItem { Text = e.Certification, Value = e.Certification, Selected = false }) 

所以我基本上不知道,我怎么可以编辑这个访问这些我的工作是编辑一个我原本没有写的软件,所以我试图尽可能少地改变一些软件在希望之中不是“打破”其他软件)

我猜你的[Post]你的控制器的动作方法是收到一个EventFullModel对象作为参数。

[HttpPost] 
public ActionResult TestController(EventFullModel eventFullModel) 
{ 
    var accessListModel = eventFullModel.AccessPointsList; 
    var eventListModel = eventFullModel.EventList; 

    accessListModel.Id; 
.... 
    eventListModel.Id; 
.... 
} 

编辑**

EventListModel model; 
model = new EventListModel{ 
.... 

var accessListModel = new AccessListModel{ 
    Id = 0, 
    AccessPoint = new List<SelectListItem>() 
}; 

var eventFullModel = new EventFullModel{ 
    AccessPointsList = accessListModel, 
    EventList = model 
}; 

return View(eventFullModel); 

我猜,因为你的控制器在一个int? id前服用,这是EventListModelid。如果你想要这个id继续工作,则必须有EventListModelAccessListModel

+0

对不起,但不是,这实际上是一个GET操作方法。它只是从服务器返回信息,它不会向它发送任何信息。另外,它只接收一个'(int?id)'作为参数。我会用这些信息更新我的原始帖子。谢谢 – Jfabs 2013-05-14 12:17:05

+0

我目前正在研究使用控制器中的AccessListModel的代码,但是当我想知道一些事情时:这样做需要'{get; set;}'EventFullModel'中的声明应该影响我在视图中使用HTML助手的能力吗? ' x.EventsList.L)%>' – Jfabs 2013-05-14 13:48:08

+0

不,它不会影响。 – SOfanatic 2013-05-14 14:30:03

如果我理解正确的话之间的关系,要返回EventFullModel而不是EventListModel的?

public ActionResult Index(int? id) { 
    return View(new EventFullModel { 
     EventList = new EventListModel { 
      Id = 0, 
      T = "", 
      C = "", 
      M = "", 
      L = ..., 
      Events = new List<SelectListItem>(), 
      Skills = ... 
     }, 
     AccessPointsList = ... createYourAccessPointsModel ... 
    }); 
} 
+0

这是真的,我需要返回一个'EventFullModel'而不是'EventListModel'。但我目前正在通过SOfanatic的解决方案。 – Jfabs 2013-05-14 14:00:28