【问题标题】:Controller not receiving data?控制器不接收数据?
【发布时间】:2016-02-03 14:37:08
【问题描述】:

我正在尝试使用 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();
    }

我检查了 bit firebug,数据已发送,但使用 Visual Studio 的调试器,我看到“tire”始终保持为空。

我能做什么?

【问题讨论】:

  • 对于您的 javascript 比较使用 === 而不是 ==,另外,请问您为什么不使用 jQuery?我通常将 jQuery 用于 ajax,所以我不熟悉这样做的手动方式,因此我无能为力:(
  • 当我说“Visual Studio 的调试器,我看到“titre”总是保持为空。”时,我的意思是我在我的代码中设置了断点,以监视 titre 的值,它从来没有别的东西空
  • 我没有使用 jquery,因为我看起来不太方便,我只是想要一个可行的解决方案。如果您认为使用 jQuery 会更好,请分享 :)
  • 你试过{titre:titre}而不是{"titre":titre}(基本上去掉titre周围的引号。实际上这可能行不通。看到你发回一个对象,它有一个字符串属性,但在控制器中你只需要字符串。尝试创建一个新类并为其赋予属性titre 并在控制器参数中包含该新类
  • 我正在使用MVC,你知道我应该把这个类放在哪里吗?

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


【解决方案1】:

我过去曾在 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(); 

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

然后

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

【讨论】:

  • 好的,我改变了我的 Js 并添加了那个类,但我似乎没有工作。我正在寻找可能不起作用的东西,请留在我身边
  • 你是不是也把{"titre": titre}改成了{titre: titre}
  • 在firebug中,我看到页面发出POST请求,发送的数据是[object Object]
  • 等一下,你有没有尝试过这样的事情:xmlhttp.open("POST", "/CheckReturn?titre=" + titre, true); 然后只是xmlhttp.send(); OR xmlhttp.open("POST", "CheckReturn", true); 然后是xmlhttp.send("titre=" + titre);
  • 天哪,它工作了,非常感谢你:D ps:我把 xmlhttp.open("POST", "CheckReturn?titre=" + titre, true);
猜你喜欢
  • 2016-10-17
  • 2021-11-23
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多