0

我正在尝试从 webForms 迁移到 Asp.net-MVC 并且遇到了一些问题。我试图弄清楚为什么这不起作用,我收到此错误:“对象引用未设置为对象的实例

我有“页面”类:

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

        }

控制器方法如下所示:

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”属性中,但我仍然从视图中收到此错误。

谢谢!

4

3 回答 3

5
return View();

你没有通过模型。

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

于 2012-10-12T00:20:37.347 回答
1

您可以返回一个模型:

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

return View(viewmodel);
于 2012-10-12T01:36:11.130 回答
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);      
    }
于 2012-10-12T06:50:53.273 回答