我没有在我的View Mvc中找回我的模型的变化

时间:2016-08-18 21:57:33

标签: c# asp.net asp.net-mvc razor

我从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";
    }

当我按提交时,不能获取新数据,为什么?

1 个答案:

答案 0 :(得分:1)

如果要渲染视图模型的TextArea属性的更新值,则应清除模型状态字典。

模型状态字典具有表单输入的初始值。因此,当razor(re)呈现相同的视图时,它优先于模型状态字典中的内容,而不是传递给视图的视图模型对象。

您可以使用ModelState.Clear()方法清除模型状态字典值,然后返回视图。

chat.TextArea = variante; 
ModelState.Clear();
return View("Index",chat);

假设您的variante变量包含更新的文本。