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

        }

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'プロパティに値を挿入していますが、ビューからこのエラーが発生します。

ありがとう!

4

3 に答える 3

5
return View();

You didn't pass a model.

You need to pass the model as a parameter to the View() method.

于 2012-10-12T00:20:37.347 に答える
1

You need to rewrite service method to return Pages:

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

And then rewrite your action method:

    public ActionResult GetFooterLinksPage()
    {            
        var viewmodel = _pagesService.GetFooterlinksPage();
        return View(viewmodel);      
    }
于 2012-10-12T06:50:53.273 に答える
1

モデルを返すことができます:

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

return View(viewmodel);
于 2012-10-12T01:36:11.130 に答える