C#ASP.NET MVC-模型在发布时被置空

C#ASP.NET MVC-模型在发布时被置空,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我已经为这个问题挣扎了一段时间,但我找不到任何解决方案 我试图在视图中向我的模型添加一个字符串,但是当模型返回到我的HttpPost时,除了我试图填充的字符串之外,所有内容都为null 我的模型看起来像这样 namespace WhatsUp.Models { public class ChatModel { public Account user { get; set; } public Contact contact { get; set; }

我已经为这个问题挣扎了一段时间,但我找不到任何解决方案

我试图在视图中向我的模型添加一个字符串,但是当模型返回到我的HttpPost时,除了我试图填充的字符串之外,所有内容都为null

我的模型看起来像这样

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);
        }


    }
}
我的控制器看起来像这样

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" />
    }
@使用WhatsUp.Models
@模型聊天模型
@{
ViewBag.Title=“聊天”;
}
与@Model.contact.name聊天
var元素=document.getElementById('chatWindow');
element.scrollTop=element.offsetHeight
@使用(Html.BeginForm())
{
@TextAreaFor(x=>x.newMessage,new{@class=“form control”})
}

对于这类事情,请始终使用ViewModel。按照以下步骤操作:

  • 首先,创建一个包含消息和聊天ID的
    ViewModel
  • 其次,将
    id
    s作为视图中的隐藏字段
  • 最后一件事是,在您的POST操作中,确保在发送消息之前通过每个
    聊天
    实例的
    id
    获取这些实例

对于这类事情,请始终使用ViewModel。按照以下步骤操作:

  • 首先,创建一个包含消息和聊天ID的
    ViewModel
  • 其次,将
    id
    s作为视图中的隐藏字段
  • 最后一件事是,在您的POST操作中,确保在发送消息之前通过每个
    聊天
    实例的
    id
    获取这些实例

首先创建一个包含您的信息和聊天ID的ViewModel。将ID设置为视图中的隐藏字段。在您的POST操作中,确保在发送消息之前通过每个聊天室的id获取信息。@fouldstok您的
表单
仅包含一个名为
newMessage的
文本框
。在FormPost上,文本框的内容将是模型对象newMessage。rest为空的原因是它们未包含在表单中。@CodeNotFound非常感谢!我把它作为答案贴了出来。您可以接受:-)首先创建一个包含消息和聊天ID的ViewModel。将ID设置为视图中的隐藏字段。在您的POST操作中,确保在发送消息之前通过每个聊天室的id获取信息。@fouldstok您的
表单
仅包含一个名为
newMessage的
文本框
。在FormPost上,文本框的内容将是模型对象newMessage。rest为空的原因是它们未包含在表单中。@CodeNotFound非常感谢!我把它作为答案贴了出来。您可以接受:-)