1
Я уже некоторое время борюсь с этой проблемой, и я не могу найти решение, которое решает его для меня.C# ASP.NET MVC - модель получает нуль на POST
Я пытаюсь добавить строку в моей модели в представлении, однако, когда модель получает вернулся в HttpPost все равно нулю для строки, которую я пытаюсь заполнить
Моя модель выглядит исключением это
namespace WhatsUp.Models {
public class ChatModel
{
public Account user { get; set; }
public Contact contact { get; set; }
public Chat chatA { get; set; }
public Chat chatB { get; set; }
public string newMessage { get; set; }
public ChatModel() { }
public ChatModel(Account user, Contact contact, Chat chatA, Chat chatB)
{
this.user = user;
this.contact = contact;
this.chatA = chatA;
this.chatB = chatB;
}
}
}
Мой контроллер выглядит следующим образом
namespace WhatsUp.Controllers
{
public class ChatsController : Controller
{
IMessageRepository repository = new DbMessageRepository();
IContactRepository contactRepository = new DbContactRepository();
IAccountRepository accountRepository = new DbAccountRepository();
IChatRepository chatRepository = new DbChatRepository();
// GET: Chats
public ActionResult Index()
{
return View();
}
public ActionResult Chat(int contactId)
{
Account user = accountRepository.GetAccount(User.Identity.Name);
Contact contact = contactRepository.GetContact(contactId);
Chat chatA = chatRepository.GetChat(user.id, contact.accountId ?? default(int));
if(chatA == null)
{
chatRepository.CreateChat(user.id, contact.accountId ?? default(int));
}
Chat chatB = chatRepository.GetChat(contact.accountId ?? default(int), user.id);
if(chatB == null)
{
chatRepository.GetChat(user.id, contact.accountId ?? default (int));
}
ChatModel chatModel = new ChatModel(user, contact, chatA, chatB);
return View(chatModel);
}
[HttpPost]
public ActionResult Chat(ChatModel chatModel)
{
repository.SendMessage(new Message(0, chatModel.newMessage, chatModel.chatA.Id));
ModelState.Clear();
return View(chatModel);
}
}
}
И мой взгляд
@using WhatsUp.Models
@model ChatModel
@{
ViewBag.Title = "Chat";
}
<h2>Chat with @Model.contact.name</h2>
<div id="chatWindow" style="overflow-y:auto; overflow-x:hidden; height:500px;">
<script>
var element = document.getElementById('chatWindow');
element.scrollTop = element.offsetHeight
</script>
</div>
@using (Html.BeginForm())
{
@Html.TextAreaFor(x => x.newMessage, new { @class = "form-control"})
<input type="submit" value="Send" class="btn btn-primary" />
}
Сначала создайте ViewModel, который будет содержать ваше сообщение и идентификаторы чата. Создайте идентификаторы как скрытое поле в вашем представлении. В своем действии POST не забудьте получить каждый чат через свой идентификатор перед отправкой сообщения. – CodeNotFound
@Broodstok Ваша 'Form' содержит только' TextBox' с именем 'newMessage'. В форме Post содержимое вашего текстового поля будет объектом модели newMessage. Причина остается пустой, потому что они не содержатся в форме. –
@CodeNotFound Большое спасибо! Это сработало. –