Не можете понять, почему модель не имеет значения при обратной передаче? - PullRequest
4 голосов
/ 06 ноября 2011

Я новичок в ASP.NET MVC и пытаюсь создать очень простой сайт типа блога, чтобы узнать, как все работает.Но у меня возникла проблема при публикации из формы комментария в модель с нулевым значением, и я не могу сказать, почему.

На странице поста в блоге у меня есть ссылка «Добавить комментарий», которая вызываетнекоторые JQuery для визуализации частичного представления, строго типизированного для CommentModel.Ссылка также передает идентификатор сообщения в блоге, а частичное кодируется следующим образом:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Blog.Models.CommentModel>" %>

<% using (Html.BeginForm())
   { %>

    <%: Html.HiddenFor(x => x.Post.ID) %>
    <%: Html.HiddenFor(x => x.CommentID) %>

    <%: Html.TextBoxFor(x => x.Name) %><br />
    <%: Html.TextBoxFor(x => x.Email) %><br />
    <%: Html.TextBoxFor(x => x.Website) %><br />
    <%: Html.TextAreaFor(x => x.Comment) %><br />

    <input type="submit" value="submit" />

<% } %>

Модель комментариев проста и выглядит следующим образом (я еще не применял никакой проверки или чего-либо еще):

public class CommentModel
    {
        public BlogPost Post { get; set; }
        public int CommentID { get; set; }

        public string Name { get; set; }
        public string Email { get; set; }
        public string Website { get; set; }
        public string Comment { get; set; }
    }

Затем предполагается опубликовать простое действие контроллера, которое добавит комментарий в базу данных и вернет пользователя на страницу.Для простоты я удалил большую часть кода, но он выглядит примерно так:

[HttpPost]
        public ActionResult CommentForm(CommentModel model)
        {
            if (ModelState.IsValid)
            {

            }
            else
            {

            }
        }

Все работает, как и ожидалось, за исключением того, что при публикации формы комментария модель комментария является нулевой.Я не могу понять, почему это ноль.Когда я просматриваю источник визуализированного частичного представления, я вижу, что «Post.ID» заполнен правильным идентификатором, но он теряется при отправке формы.

Я что-то упускаю здесь из-за чего-то очевидного?Я настраивал формы, подобные этому в прошлом, и он работал нормально, я не могу понять, почему это не сейчас.Заранее спасибо.

Позже Редактировать:

Я неправильно набрал код и изменил public ActionResult CommentForm(CommentModel model) с public ActionResult CommentForm(CommentModel comment), который вызывал проблему.

Спасибо запомощь.

Ответы [ 2 ]

6 голосов
/ 06 ноября 2011

Подобный вопрос был дан ответ вчера.Извлечение: MVC3 - Вставка с использованием ViewModel - Ссылка на объект не установлена ​​на экземпляр объекта

Проблема, которую я вижу, заключается в том, что при публикации формы Post.ID и CommentIDпередаются, в то время как ваше действие ожидает полноценный объект типа "CommentModel".Связыватель модели не может отобразить данные публикации в соответствующий объект модели.

0 голосов
/ 06 ноября 2011

Добавьте:

public int PostID {get; set;}

... к вашей модели и укажите это в контроллере как скрытый ввод.Объект Post не будет анализироваться легко.

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