使用AJAX的ASP.NET MVC没有按预期工作

时间:2017-05-02 04:30:16

标签: jquery asp.net json ajax asp.net-mvc

这是我想要实现的目标:

View1将name字符串发送到View2,View2将JSON发送到View1,View1解析它并显示数据。

View1将名称字符串发送到View2,如下所示:

    $(document).ready(function () {

                var myurl = "/Controller/View2";

                $("form").submit(function (event) {
                    $.ajax({
                        type: 'POST',
                        url: myurl,
                        data: $('#nameid').val(),
                        success: function (newdata) {

View2是一个返回JSON的控制器:

        public ActionResult View2(string nameid)
        {


    //do stuff


            return Json(jsObj, JsonRequestBehavior.AllowGet);
        }

View1控制器是这样的:

    public ActionResult View1(string nameid)
    {
        if(!string.IsNullOrEmpty(nameid))
        {
            return RedirectToAction("View2", new { nameid = nameid });
        }
        else
        {
            return View();
        }

    }

我不知道哪个部分搞砸了但是当我点击提交时,它会显示JSON对象本身。我该如何解决这种情况?感谢。

编辑: 这是我的View1视图(我没有查看View2控制器):

<!doctype html>
<html>
<head>
    <meta charset="utf-8"></meta>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
    <script type="text/javascript" src="~/Scripts/cytoscape.js"></script>
</head>
<style>
    #cy {
        width: 80%;
        height: 80%;
        position: center;
        top: 0px;
        left: 0px;
    }
</style>
<body>

    <form>
        Enter a name:<br>
        <input type="text" name="nameid" id="nameid" value="">
        <br><br>
        <input type="submit" value="Send!">
    </form> 

    <div id="cy"></div>
    <script>

        var myVar = null


        $(document).ready(function () {



            $("form").submit(function (event) {
                //event.preventDefault();
                $.ajax({
                    type: 'POST',
                    url: "/Controller/View2",
                   data: { nameid: $('#nameid').val() },
                    success: function (newdata) {

                        var cy = cytoscape({


                            container: document.getElementById("cy"),
                            elements: JSON.parse(newdata)

                        });

                    }
                });

            });


        });



    </script>
</body>
</html>

3 个答案:

答案 0 :(得分:1)

首先,您必须阻止正常的表单提交。

其次,要将nameid值绑定到action参数,必须为其指定正确的名称。

第三。你有一个名为ControllerController的控制器类吗?

$("form").submit(function (event) {
  event.preventDefault();
  var myurl = '@Url.Content("~/Controller/View2")';
  $.ajax({
    type: 'POST',
    url: myurl,
    data: { nameid: $('#nameid').val() },
    success: function (newdata) {
      console.log(newdata);
      // ...
    },
    error: function(xhr, status, error) {
      console.log("ERROR: " + status + " - " + error);
      console.log(xhr.responseText);
    });
  });

答案 1 :(得分:1)

你能尝试像这样重写ajax并尝试一下。

 $.ajax({
                type: 'POST',
                url: '/Controller/View2',
                data:{ 
                       nameid: $('#nameid').val()
                      },
                success: function (newdata) {

答案 2 :(得分:1)

请检查您指定的网址是否正确。

var myurl = "/Controller/View2";

因为你有一个名为MainGraph2的行动

此外,您将无法从Ajax调用重定向。所以尝试重定向Ajax成功回调函数。

另外,如其他答案中所述,您应该将数据传递给控制器​​,如下所示:

data: { nameid: $('#nameid').val() },

修改

一切看起来都很完美,请尝试下面的内容:

$("form").submit(function (event) {
    event.preventDefault();
    $.ajax({
        type: 'POST',
        url: "/Sample/View2",
        data: { nameid: $('#nameid').val() },
        success: function (newdata) {
            $("#cy").val(newdata);
         }
     });
  });

此处示例( url:“/ Sample / View2”)是控制器名称( SampleController )。 另外,请确保不要使用nameid作为参数调用视图ID,如

中所示
http://localhost/Sample/View1?nameid=Jason

如果以这种方式调用它,它将会重新调整json数据。

注意:我已将控制器命名为SampleController,将 cy 命名为文本的输入类型。