2016-08-18 53 views
-1

我开始在asp.net Mvc和测试,我正在做一个简单的聊天使用PubNub api,我想完成它只使用剃须刀代码和只有一页。我不回我的模型在我查看Mvc的变化

型号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

你指的是什么“新数据”?你的意思是你期望NuevoMensaje的文本框被重置为空字符串吗? –

+0

我编辑了帖子,请再次检查不完整请注意 –

+1

评论有问题。你期望发生什么,实际发生了什么? –

回答

1

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

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

您可以使用ModelState.Clear()方法在返回到视图之前清除模型状态字典值。

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

假设你variante变量有更新的文字。

+0

谢谢我的朋友很容易,但我很喜欢在asp.net中的Jhon Snow“我什么也不知道”jejejejeje。现在,我的问题是PubNub var“variante”在测试你的代码时不会获得新值。 –