我正试图从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'属性,但我仍然从视图中收到此错误。
谢谢!
答案 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);
}