0

「 System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。」新しい記事を挿入しようとするたびにエラーが発生する......最初にコードを使用せずにこれと同じことを行いました。つまり、既存のDB [記事テーブル、タグテーブル、および記事タグテーブル]にADO.netデータモデルを使用しましたが、機能します結構ですが、今回はコードを最初に使用しようとしていますEF ...誰かにこれを調べてもらい、間違いを指摘してもらいたいだけです....私はいつでも最初にDBに頼ることができます。 EDMXですが、私は本当に間違いを犯したいです。

public class ControlPanelController : Controller
        {
            //
            // GET: /ControlPanel/

           private IPageRepository _repositoryOne;
           private IArticleRepository _repositoryTwo;
            private ITagRepository _repositoryThree;


            public ControlPanelController(IPageRepository repo, IArticleRepository repo2,ITagRepository repo3)
            {
                 _repositoryOne = repo;
                _repositoryTwo = repo2;
                _repositoryThree = repo3;

            }

それが私のコントローラーです.....

以下は、エラーを出しているメソッドです....

        [HttpPost]
        [ValidateInput(false)]
        public ActionResult ArticleCreator(string title, string mainBody, string addedBy, DateTime dateAdded, string tags)
        {
            Article article = new Article();
            article.Title = title;
            article.ShortBody = ClassAction.TruncateAtWord(mainBody, 500);
            article.MainBody = mainBody;
            article.DateAdded = dateAdded;
            article.AddedBy = addedBy;
            tags = tags ?? string.Empty;
            string[] tagNames = tags.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string tagName in tagNames)
            {
                article.Tags.Add(GetTag(tagName));

            }

            _repositoryTwo.SaveArticle(article);
            return RedirectToAction("Index");
        }


 private Tag GetTag(string tagName)
        {
            return _repositoryThree.Tags.FirstOrDefault(x => x.Name == tagName) ?? new Tag() { Name = tagName };

        }

私のエンティティはこのように見えます

 public class Article
    {
        [Key]
        [HiddenInput(DisplayValue = false)]
        public int ArticleId { get; set; }

        public string Title { get; set; }
        public string ShortBody { get; set; }
        public string MainBody { get; set; }
        public DateTime DateAdded { get; set; }
        public String AddedBy { get; set; }

        public ICollection<Tag> Tags { get; set; } 


    }


 public class Tag
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }

        public ICollection<Article> Articles { get; set; } 
    }
4

1 に答える 1

0

あなたは完全に間違っています。

(string title, string mainBody, string addedBy, DateTime dateAdded, string tags)

上記の行は間違っています。アクション result でパラメーターを使用したくありません。モデルクラスを渡すことができ、モデルクラスのプロパティから値を取得できます..

これを参照してください

新規*編集*

[HttpPost]
        [ValidateInput(false)]
        public ActionResult ArticleCreator(string title, string mainBody, string addedBy, DateTime dateAdded, string tags)
        {
            Article article = new Article();
            article.Title = "TestTitle";
            article.ShortBody = "TestBody";
            article.MainBody = "TestMainBody";
            article.DateAdded = DateTime.Now;
            article.AddedBy = "TestName";
            tags = "Test  Tagssss";
            string[] tagNames = tags.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string tagName in tagNames)
            {
                article.Tags.Add(GetTag(tagName));

            }

            _repositoryTwo.SaveArticle(article);
            _repositoryTwo.SubmitChanges();
            return RedirectToAction("Index");
        }
于 2013-03-30T15:15:00.523 に答える