访问控制器中的组合模型

时间:2013-05-13 20:29:54

标签: asp.net-mvc

这可能很难解释,但请耐心等待......所以,我有一个结合了两种不同模型的模型,以便我可以在一个视图中使用两者中找到的数据:合并:

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; }
}

我目前收到一个错误,我认为该错误源于此视图的控制器方法最初只返回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 })

所以我基本上想知道,如何编辑此内容以访问EventListModel的那些内容,但我的model = new EventFullModel?

(免责声明:我已经改变了一些事情的名称,我正在编辑一个我最初没写过的软件,所以我试图尽可能少地改变,希望不要“破坏”其他软件的各个部分。)

2 个答案:

答案 0 :(得分:0)

我猜你的控制器的[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,这是id的{​​{1}}。如果您希望此EventListModel继续有效,则必须在idEventListModel之间建立关系

答案 1 :(得分:0)

如果我理解正确,您想要返回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 ...
    });
}