Укажите дополнительные поля
Если вы хотите, чтобы ваш пост-экземпляр также был предварительно заполнен, вам нужно будет также включить его обязательные поля.
Я подозреваю, что у вас есть просмотр сообщения, где у пользователя есть форма, отображающая поля комментариев, чтобы они могли оставить комментарий к сообщению.
предположим, у вас есть классы:
public class Post
{
public int Id { get; set; }
[Required]
public string Title { get; set; }
public string Content { get; set; }
}
public class Comment
{
public int Id { get; set; }
[Required]
public string Author { get; set; }
[Required]
public string Content { get; set; }
public Post Post { get; set; }
}
Обычный браузер POST
Что вам нужно сделать, это добавить поля постов (скрытого типа) в вашу форму. Я не знаю, как вы создали свою форму, используете ли вы строгие представления или нет ... Во всяком случае. Ваши входные данные должны иметь имена:
- Post.Id (для добавления нового комментария к конкретному сообщению
- Post.Title (потому что я установил его как требуется, но вы можете поместить сюда любой фиктивный текст, если все, что вы будете использовать, это Post.Id; заголовок просто необходимо установить, чтобы проверка модели не выполнялась обязательно)
- Автор - видимый (это комментарий автора)
- Контент - видимый (это комментарий)
Не важно, создаете ли вы эти поля с помощью Html-помощников или вручную. Связыватель модели по умолчанию сможет создать экземпляр объекта post, и проверка вашей модели не завершится неудачей.
Ajax POST
Если вы публикуете свои комментарии с помощью Ajax, вы можете сделать то же, что описано в предыдущем примере, и просто использовать функцию jQuery .serialize()
, которая сериализует поля формы при вызове $.ajax()
.
Но вы также можете программно собрать все поля, используя Javascript, и точно так же отправить эти данные на сервер. Вы можете просто создать объект JSON:
var comment = {
Author: $("#Author").val(),
Content: $("#Content").val(),
Post: {
Id: $("#Post_Id").val(),
Title: $("#Post_Title").val()
}
};
$.ajax({
url: "someURL",
type: "POST",
data: $.toDictionary(comment),
success: function(data) {
// probably get a partial view with comment you can append it to comments
},
error: function(xhr, status, err) {
// process error
}
});
Здесь используются две вещи, требующие пояснения:
Обработка ошибок Ajax также может потреблять недопустимые ошибки состояния модели (ошибка проверки модели) и может быть выполнена таким образом .
Преобразование сложного (многоуровневого) объекта JSON было выполнено с помощью специального плагина $.toDictionary()
, который можно найти здесь и предоставляет возможность просто использовать сложные объекты JSON, которые Понимается Asp.net MVC по умолчанию модель связующего. Также подходит для дат и списков.