我从asp.net Mvc开始并进行测试,我正在使用PubNub api进行简单的聊天,我想只使用剃刀代码和仅一页完成它。
Model Chat.cs:
namespace SimpleChat.Models
{
public class Chat
{
public string NuevoMensaje { get; set; }
public string TextArea { get; set; }
}
}
查看:
@model SimpleChat.Models.Chat
@using (Html.BeginForm("Index","Chat",FormMethod.Post))
{
@Html.LabelFor(model => model.NuevoMensaje, "Nuevo Mensaje")
@Html.TextBoxFor(model => model.NuevoMensaje)
<input type="submit" class="btn-default" value="Enviar" />
@Html.TextAreaFor(model => model.TextArea)
}
控制器:
static string variante = "";
public ActionResult Index()
{
pubnub.Subscribe<string>("Chat", subCallback, connecCallBack, errorCallback);
//Chat nuevochat = new Chat();
return View();
}
[HttpPost]
public ActionResult Index(Chat chat)
{
pubnub.Publish<string>("Chat", chat.NuevoMensaje, userCallback, puberror);
chat.NuevoMensaje = "";
chat.TextArea =variante;
return View("Index",chat);
}
private void subCallback(string obj)
{
string[] retorno = obj.Split(',','"');
variante += "Richard dice:" + retorno[0] + "\n";
}
当我按提交时,不能获取新数据,为什么?
答案 0 :(得分:1)
如果要渲染视图模型的TextArea
属性的更新值,则应清除模型状态字典。
模型状态字典具有表单输入的初始值。因此,当razor(re)呈现相同的视图时,它优先于模型状态字典中的内容,而不是传递给视图的视图模型对象。
您可以使用ModelState.Clear()
方法清除模型状态字典值,然后返回视图。
chat.TextArea = variante;
ModelState.Clear();
return View("Index",chat);
假设您的variante
变量包含更新的文本。