Как правило, вы не должны передавать объекты таким образом - в лучшем случае вы должны только передавать ViewModels, чтобы не допустить того, чтобы кто-то подделал данные и потенциально испортил ваше приложение.
То, как вы это делаете с помощью перенаправления, будетфактически вставьте всю модель в параметры URL-адреса, прежде чем переходить обратно в код, оставляя его широко открытым для того, чтобы кто-то мог изменить его по своему усмотрению.
В идеале вы должны опубликовать, чтобы создать постоянный экземпляр, а затем перенаправить, передав только идентификаторк методу Chat()
, например, так:
CreateNewChatController.cs
public ActionResult CreateConversation(string username, string convname)
{
Guid chatId = yourServiceFactory.CreateNewChat(username, convname);
// You passed the service the username anyway so it can do the Chatters.Add() internally
return RedirectToAction("Chat", "Chat", new { id = chatId });
}
ChatController.cs
public ActionResult Chat(Guid id)
{
ChatModel model = yourServiceFactory.GetChatById(id);
return View(model);
}
Однако, если вы действительно хотите передать модель на ActionResult Chat(ChatModel model)
, затем вы можете выполнить и вернуть действие контроллера напрямую.
public IActionResult CreateConversation(string username, string convname)
{
ChatModel model = new ChatModel(username, convname);
model.Chatters.Add(username);
ChatController chatController = new ChatController();
return chatController.Chat(model);
}
Я создал очень упрощенный рабочий пример этого на основе того, что вы сказали выше,поэтому любая проверка, которую вы можете иметь в конструкторе ChatModel
, опущена в моем примере.
Для любых других ошибок я бы предложил проверитьчтобы убедиться, что передаваемые вами значения не определяются приложением как «потенциально опасные» и отбрасываются.
Принимая во внимание, что использование .textContent
вместо значения приведет к полному содержаниюмежду начальным и конечным тегами данного элемента, я предполагаю, что элемент является типом textarea, а не обычным вводом текста. Вы можете получать дополнительные элементы между <textarea>...</textarea>
В моем примере моя функция javascript просто принимает две локальные переменные, объявленные и установленные внутри функции. Не видя вашу страницу отправки, я не могу прокомментировать, почему установка значения препятствует выполнению вызова.