mvc一个视图能不能使用两个模型类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mvc一个视图能不能使用两个模型类相关的知识,希望对你有一定的参考价值。

参考技术A 可以的。通过Controller把他们控制好就行。 参考技术B M是model层,就是为对象建立一个模型。比如为学生建立一个model,包括姓名年龄学号课程成绩等等内容,就是一个实体。 V是view层,也就是表现层、视图层。你从前台网页上看到学生这个实体的各种属性以及方法就是view层所要展示的。 C是controller...本回答被提问者和网友采纳

尝试在 mvc 3 中一次将两个模型传递到同一个视图时出现问题

【中文标题】尝试在 mvc 3 中一次将两个模型传递到同一个视图时出现问题【英文标题】:Having issue while trying to pass two model to the same view at a time in mvc 3 【发布时间】:2012-10-11 06:13:43 【问题描述】:

我正在尝试为我的简单博客网站创建我的个人资料类型页面。我有两个像这样的简单模型类:

public class UserInfoModel


    public string UserName  get; set; 


    public string Email  get; set; 


    public string Password  get; set; 


    public string ConfirmPassword  get; set; 






public class NewPost


    public string PostTitle  get; set; 


    public string PostStory  get; set; 


我创建了一个用户和帖子的联合模型类,可以像这样传递给视图:

public class UserPostModel

    public UserInfoModel User  get; set; 
    public NewPost Post  get; set; 

我写的检索用户和帖子信息的方法是这样的:

public int GetUserID(string _UserName)
    
        using (var context = new TourBlogEntities1())
        
            var UserID = from s in context.UserInfoes
                         where s.UserName == _UserName
                         select s.UserID;
            return UserID.Single();

        
    

    public UserInfo GetUserDetails(int _UserID)
    
        using (var context = new TourBlogEntities1())
        
            var UserDetails = (from s in context.UserInfoes
                              where s.UserID == _UserID
                              select s).Single();
            return UserDetails;
        
    

    public Post GetUserPosts(int _UserID)
    
        using (var context = new TourBlogEntities1())
        
            var entity = (from s in context.Posts
                         where s.UserID == _UserID
                         select s).Single();

            return entity;
        
    

最后我从我的控制器操作中调用我的所有方法,如下所示:

[Authorize]
   public ActionResult MyProfile()
   
       var Business = new Business();
       var UserID=Business.GetUserID(User.Identity.Name);
       var UserEntity=Business.GetUserDetails(UserID);
       var PostEntity=Business.GetUserPosts(UserID);




       var model = new UserPostModel();
       model.User.UserName = UserEntity.UserName; // problem showing here
       model.User.Email = UserEntity.Email;
       model.Post.PostTitle = PostEntity.PostTitle;
       model.Post.PostStory = PostEntity.PostStory;




       return View("MyProfile",model);
   

显示类似“对象未引用对象类型或空对象”的运行时错误。在传递单个模型时,我以非常相似的方式工作得很好。我在这里做错了什么?

【问题讨论】:

【参考方案1】:

修改了你的 UserPostModel

public class UserPostModel

    public UserPostModel()
    
       User = new UserInfoModel();
       Post = new Post();   
    
    public UserInfoModel User  get; set; 
    public NewPost Post  get; set; 

注意:在设置为模型之前检查每个值,它不应为空。

【讨论】:

以上是关于mvc一个视图能不能使用两个模型类的主要内容,如果未能解决你的问题,请参考以下文章

尝试在 mvc 3 中一次将两个模型传递到同一个视图时出现问题

理解MVC模式

MVC - 两个模型绑定到同一视图的转换问题

在视图中的模型之间导航的 MVC 3 错误

MVC 3 不能将字符串作为视图模型传递?

将多个模型传递给 ASP.NET MVC 中的视图