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中.求大神解惑!
<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]行不?
大神正解,我的问题你都发现了!也感谢楼上诸位!
@许好多: 我并不是大神,只是用mvc用得久了,很容易发现问题所在,建议你在ajax异步提交的时候看看type是什么类型,那控制器里面也要接收时给它什么类型,dataType也要注意,你不写的话控制器不知道你请求的是那种类型,到底是text呢还是json呢? 它是不知道的,你返回Json或者Content的时候,那你dataType就应该给它为json;还要注意ActionResult,它好像并不返回json或者content什么的
这些只是我接触到的一些,你自己也要好好看看mvc这些
路由配置正确了吗???
<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>
楼上正解,不过你样用get请求可以实现,配置下路由
恩 ,get也是可以实现的,只不过我习惯用post,所以一来就post顺手了
这个方法AddComment加上[httppost]特性,而且如果不是提交复杂数据,直接使用httpget方式,参数接在url后面即可。