Устранение неполадок приложения блога asp.net mvc3: последовательность не содержит элементов - PullRequest
0 голосов
/ 07 июля 2011

В настоящее время я работаю над учебником для блога, используя ado.net и mvc3 (в c #).Я довольно новичок в разработке, поэтому, пожалуйста, немного расслабьтесь!В любом случае у меня возникают проблемы с отладкой одного из контроллеров данных, ответственных за чтение (проверка отключена) сообщений пользователя и добавление их в блог.Код разбивается в функции GetPost (отмечен комментарием).Любая помощь будет принята с благодарностью

`using System;using System.Collections.Generic;использование System.Linq;использование System.Web;использование System.Web.Mvc;используя Blog.Models;using System.Text;

namespace Blog.Controllers
{
    public class PostsController : Controller
    {
        private BlogModel model = new BlogModel();

        public ActionResult Index()
        {
            return View();
        }
        [ValidateInput(false)]
        public ActionResult Update(int? id, string title, string body, DateTime dateTime, string tags)
        {
            if (!IsAdmin)
            {
                return RedirectToAction("Index");
            }

            Post post = GetPost(id);
            post.Title = title;
            post.DateTime = dateTime;
            post.Body = body;
            post.Tags.Clear();

            tags = tags ?? string.Empty;
            string[] tagNames = tags.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string tagName in tagNames)
            {
                post.Tags.Add(GetTag(tagName));

            }

            if (id.HasValue)
            {
                model.AddToPosts(post);
            }
            model.SaveChanges();
            return RedirectToAction("Details", new { id = post.ID });
        }

        public ActionResult Edit(int? id)
        {
            Post post = GetPost(id);
            StringBuilder tagList = new StringBuilder();
            foreach (Tag tag in post.Tags)
            {
                tagList.AppendFormat("{0} ", tag.Name);
            }
            ViewBag.Tags = tagList.ToString();
            return View(post);
        }

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

/ * Ниже приведено исключение «Последовательность не содержит элементов» * /

        private Post GetPost(int? id)
        {
            return id.HasValue ? model.Posts.Where(x => x.ID == id).First() : new Post() { ID = -1 };
        }

        public bool IsAdmin { get { return true; } }
    }
}

` РЕДАКТИРОВАТЬ 16:29 GMT Да, вы, ребята, правы на деньги!Это прошло хорошо, спасибо!Что странно, теперь я получаю исключение Nullreference для этого бита

            post.Title = title;
            post.DateTime = dateTime;
            post.Body = body;

Должен ли я их как-то объявлять или я что-то упускаю?

Не обращайте внимания на правку выше,была просто опечатка.Еще раз спасибо

Ответы [ 3 ]

1 голос
/ 07 июля 2011

Попробуйте использовать FirstOrDefault().Если выражение LINQ не дает результата, вполне вероятно, что с методами First() или Single() вы получите исключение «Последовательность не содержит элементов».

Редактировать: При использовании FirstOrDefault(), Default означает null.Вам нужно проверить, возвращает ли GetPost null.

0 голосов
/ 07 июля 2011

Скорее всего, ваша проблема в том, что результаты запроса model.Posts.Where(x => x.ID == id) пусты, что заставляет метод First() выдавать ошибку, что является поведением по умолчанию при запросе первого элемента пустого набора результатов.

Попробуйте использовать FirstOrDefalut вместо First, что будет возвращать null при вызове исключения. И, конечно же, проверьте, равен ли ваш результат нулю, чтобы не использовать пустые объекты!

0 голосов
/ 07 июля 2011

Я предполагаю, что model.Posts не содержит каких-либо элементов, и поэтому попытка выполнить First() вызовет полученную ошибку.

Использование FirstOrDefault() вместо этого вернет значение по умолчанию:тип не должен быть найден в коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...