控制器没有收到数据?

时间:2016-02-03 14:37:08

标签: javascript c# ajax asp.net-mvc

我正在尝试使用POST将数据从视图发送到控制器,但我似乎无法工作。

这是我的代码(javascript函数):

function showHint(str) {
if (str.length == 0) {
    document.getElementById("txtHint").innerHTML = "";
    return;
} else {
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.getElementById("txtHint").innerHTML = xmlhttp.responseText;
        }
    };
    var titre = str;
    xmlhttp.open("POST", "CheckReturn", true);
    //xmlhttp.send(titre);
    xmlhttp.send({"titre":titre});
}

}

触发它的html:

    <div id="check-name" class="form-row">
    <input id="name" type="text" name="name" placeholder="Titre de l'événement" onkeyup="showHint(this.value)">
    <span id="txtHint"></span>
</div>

最后,控制器支持得到它:

        [HttpPost]
    public ActionResult CheckReturn(string titre)
    {
        var contexte = new intranetEntities();
        var ajax = contexte.evenementiel.SqlQuery("Somequery" + titre);
        ViewBag.ajax = ajax;

        return PartialView();
    }

我查了一下firebug,数据被发送了,但是使用visual studio的调试器,我看到“titre”总是保持为空。

我该怎么办?

1 个答案:

答案 0 :(得分:2)

我曾经遇到类似于asp.net的东西,但我从未真正试图了解发生了什么。为我修复的是以下内容:

在你的后端某处创建一个新类(任何地方,现在都无关紧要)

class TitreWrapper {
 public string titre {get; set;}
}

然后在您的控制器中

[HttpPost]
public ActionResult CheckReturn(TitreWrapper titreWrap)
{
  string titre = titreWrap.titre;
}

这应该根据我以前的经验

最佳答案是错误的(但在其他情况下我认为是正确的)

对于这个问题,以下工作:

xmlhttp.open("POST", "/CheckReturn?titre=" + titre, true);

然后只是

xmlhttp.send(); 

OR

xmlhttp.open("POST", "CheckReturn", true);

然后

xmlhttp.send("titre=" + titre);