-1

修正できない基本的なエラーがあります...オブジェクト参照がオブジェクトのインスタンスに設定されていません

efでasp.net mvc4を使用しています

私のコントローラー

 public class PostController : Controller
    {
        private UsersContext db = new UsersContext();

        public ActionResult Index()
        {
            return View(db.Posts.ToList());
        }

        public ActionResult Create()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Create(FormCollection values)
        {
            var post = new Post();
            TryUpdateModel(post);

            if(ModelState.IsValid)
            {
                var context = new UsersContext();
                var username = User.Identity.Name;
                var user = context.UserProfiles.SingleOrDefault(u => u.UserName == username);
                var userid = user.UserId;
                // var firstname = user.FirstName;

                post.UserId = userid;
                post.Date = DateTime.Now;

                db.Posts.Add(post);
                db.SaveChanges();
            }
            return View("Index");
        }

と私の見解:

@model IEnumerable<MyProject.Models.Post>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table>
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Content)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Date)
        </th>
        <th></th>
    </tr>

   @foreach (var item in Model) { //**line with error**

    <tr>
        <td>
                @Html.DisplayFor(modelItem => item.Content)
        </td>
        <td>
                @Html.DisplayFor(modelItem => item.Date)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.PostId }) |
            @Html.ActionLink("Details", "Details", new { id=item.PostId }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.PostId })
        </td>
    </tr>
}
</table>

ご協力いただきありがとうございます

4

2 に答える 2

8

コントローラーの GET アクションの後にモデルをビューに送信するのを忘れました。あなたのreturn声明はおそらく次のようになります。

    public ActionResult Create()
    {
        return View("Create", new Post());
    }

モデルに何かを提供する必要があります。そうnullしないと、ビューに表示されます。

おそらく、POST メソッドでも同じ問題が発生し、次の結果が返されます。

return View("Index");

それを行うのではなく、おそらく Index アクションにリダイレクトする必要があります。

return RedirectToAction("Index");

また、成功した場合にのみ実行する必要があります。モデルの状態が有効でない場合は、おそらく作成画面に戻ってエラーを表示する必要があります。したがって、投稿アクションは次のようになります。

   [HttpPost]
    public ActionResult Create(FormCollection values)
    {
        var post = new Post();
        TryUpdateModel(post);

        if(ModelState.IsValid)
        {
            var context = new UsersContext();
            var username = User.Identity.Name;
            var user = context.UserProfiles.SingleOrDefault(u => u.UserName == username);
            var userid = user.UserId;
            // var firstname = user.FirstName;

            post.UserId = userid;
            post.Date = DateTime.Now;

            db.Posts.Add(post);
            db.SaveChanges();

            return RedirectToAction("Index");
        }

        return View("Create", post);
    }
于 2012-12-13T17:28:41.990 に答える
0

であるObject reference not set to an instance of an objectオブジェクトのプロパティまたはメソッドにアクセスしようとしていることを意味しますnull

于 2012-12-13T17:28:57.990 に答える