模型属性为空

时间:2012-10-12 00:19:22

标签: asp.net-mvc

我正试图从webForms迁移到Asp.net-MVC并遇到一些问题。我想知道为什么这不起作用,我收到这个错误:“对象引用没有设置为对象的实例

我有课程'Pages':

namespace _2send.Model
{   
    public class Pages
    {        
        public string PageContent { get; set; }        
        public string PageName { get; set; }       
        public int LanguageId { get; set; }      
    }    
}

我正在使用此类将值插入'Pages.PageContent'属性:

namespace _2send.Model.Services
{
    public class PagesService : IPagesService
    {
        public void GetFooterlinksPage()
        {

            DB_utilities db_util = new DB_utilities();           
            SqlDataReader dr;

            Pages pages = new Pages();

            using (dr = db_util.procSelect("[Pages_GetPageData]"))
            {
                if (dr.HasRows)
                {
                    dr.Read();
                    pages.PageContent = (string)dr["PageContent"];
                    dr.Close();
                }                
            }

        }

Controller方法如下所示:

private IPagesService _pagesService;
    public FooterLinksPageController(IPagesService pagesService)
    {
        _pagesService = pagesService;
    }

public ActionResult GetFooterLinksPage()
        {            
            _pagesService.GetFooterlinksPage();
            return View();      
        }

我正在尝试在视图中编写属性,如下所示:

@model _2send.Model.Pages
<div>
    @Model.PageContent;
</div>

调试时,方法被触发,dataReader将值插入'PageContent'属性,但我仍然从视图中收到此错误。

谢谢!

3 个答案:

答案 0 :(得分:5)

return View();

你没有传递模特。

您需要将模型作为参数传递给View()方法。

答案 1 :(得分:1)

您可以返回一个模型:

var viewmodel = new _2send.Model.Pages().
//here you configure your properties

return View(viewmodel);

答案 2 :(得分:1)

您需要重写服务方法才能返回页面:

    public Pages GetFooterlinksPage()
    {

        DB_utilities db_util = new DB_utilities();           

        Pages pages = new Pages();

        using (var dr = db_util.procSelect("[Pages_GetPageData]"))
        {
            if (dr.HasRows)
            {
                dr.Read();
                pages.PageContent = (string)dr["PageContent"];                    
                return pages;
                // Because you use using, you don't need to close datareader
            }                
        }
    }

然后重写你的行动方法:

    public ActionResult GetFooterLinksPage()
    {            
        var viewmodel = _pagesService.GetFooterlinksPage();
        return View(viewmodel);      
    }