首页新闻找找看学习计划

asp.net mvc下 ajax提交数据Action无法收到的问题?

0
悬赏园豆:50 [已解决问题] 解决于 2015-09-28 20:52
 public ActionResult AddComment(string comment)
        {
            //_comments.Insert("<li>" + comment + "</li>");
            //return Content(string.Join("\n", _comments.ToArray()));
            if (comment==null)
            {
                return Content("请输入货品编码!");
            }
            Goods goods = db.Goods.Find(comment);
            if(goods==null)
            {
                return Content("货品不存在");
            }
            return Content(goods.Name);
        }

以上是Action;

<script type="text/javascript">
    $(document).ready(function () {
        $("#PartChild").bind("change", function () {
            if ($(this).val() == 0){
                return;
            }
            else {
                var comment = $(this).val();
                $.ajax({
                    url:"@Url.Action("AddComment","Goods")",
                    type:"POST",
                    data:comment,
                    success:function(sesponseTest){
                        $("#comments").text(sesponseTest)
                    }
        });
    }
    });
    });
</script>

以上是View里的jquery.

 

执行后Action始终判定comment==null,结果输出"请输入货品编码!".

但在ajax部分comment的确可以根据"change"事件变化成功赋值.也就是comment的值不能成功传到Action中.求大神解惑!

许好多的主页 许好多 | 初学一级 | 园豆:157
提问于:2015-09-28 18:32
< >
分享
最佳答案
1

<script type="text/javascript">

  $(document).ready(function () {

     $("#PartChild").change( function () {
      var comment = $(this).val();
      if(comment.lenth==0)
      {
        alert("请输入货品编码!");
        return;
       }
        $.ajax({
          url:"/Goods/AddComment",
          type:"POST",
          dataType:"Json",
          data:{comment:comment,action:"AddComment"}, //data这行要加后台的参数名.
          success:function(sesponseTest){
            if(sesponseTest!=null)
              $("#comments").text(sesponseTest)
          }

        });

       })

      });

    });

</script>

 

 

[HttpPost]
public ContentResult AddComment(string comment)
{
  //_comments.Insert("<li>" + comment + "</li>");
  //return Content(string.Join("\n", _comments.ToArray()));
  if (comment==null)
  {
    return Content("请输入货品编码!");
  }
  Goods goods = db.Goods.Find(comment);
  if(goods==null)
  {
    return Content("货品不存在");
  }
  return Content(goods.Name);
}

 

 

你返回的是Content,ActionResult返回的是Content么?是View哪些吧??

你ajax提交的时候是Post,请问你的接收呢?最起码你也要对应的给一个吧?[HttpPost]行不?

收获园豆:40
如此低调的男人 | 小虾三级 |园豆:840 | 2015-09-28 19:22

大神正解,我的问题你都发现了!也感谢楼上诸位!

许好多 | 园豆:157 (初学一级) | 2015-09-28 20:48

@许好多: 我并不是大神,只是用mvc用得久了,很容易发现问题所在,建议你在ajax异步提交的时候看看type是什么类型,那控制器里面也要接收时给它什么类型,dataType也要注意,你不写的话控制器不知道你请求的是那种类型,到底是text呢还是json呢? 它是不知道的,你返回Json或者Content的时候,那你dataType就应该给它为json;还要注意ActionResult,它好像并不返回json或者content什么的

这些只是我接触到的一些,你自己也要好好看看mvc这些

如此低调的男人 | 园豆:840 (小虾三级) | 2015-09-29 09:48
其他回答(4)
0

路由配置正确了吗???

Jeffcky | 园豆:2561 (老鸟四级) | 2015-09-28 18:45
0
<script type="text/javascript">
    $(document).ready(function () {
        $("#PartChild").bind("change", function () {
            if ($(this).val() == 0){
                return;
            }
            else {
                var comment = $(this).val();
                $.ajax({
                    url:"@Url.Action("AddComment","Goods")",
                    type:"POST",
                    data:"comment="+comment, //data这行要加后台的参数名.
                    success:function(sesponseTest){
                        $("#comments").text(sesponseTest)
                    }
        });
    }
    });
    });
</script>
收获园豆:10
李丶GuanYao | 园豆:1228 (小虾三级) | 2015-09-28 18:50
0

楼上正解,不过你样用get请求可以实现,配置下路由

稳稳的河 | 园豆:4183 (老鸟四级) | 2015-09-28 19:21

恩  ,get也是可以实现的,只不过我习惯用post,所以一来就post顺手了

支持(0) 反对(0) 如此低调的男人 | 园豆:840 (小虾三级) | 2015-10-02 11:21
0

这个方法AddComment加上[httppost]特性,而且如果不是提交复杂数据,直接使用httpget方式,参数接在url后面即可。

AndioM | 园豆:214 (菜鸟二级) | 2015-09-29 10:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册