2010-03-05 34 views
0

这段代码有什么问题。代码是找到显示的javascript和debug1。如果我删除参数p,代码还会找到mycontrol操作,并显示debug2。

查看:

function method(p) { 
    alert("debug1"); 
    $.post('../MyController/MyAction/' + p, function() { 
     alert("debug2"); 
     $('#panel').empty().html('<img src="../Content/images/ajax-loader.gif"/>'); 
     $('#panel').load('../Controller/Index'); 
    }); 
} 

控制器:

public ActionResult MyAction(int p) 
    { 
     // Some code 

     return null; 
    } 
+0

检查“网络”选项卡,你可能会发现问题。另外,你的路线如何建立? – 2010-03-05 08:44:54

+0

你可以发布调用'method'的代码以及你的Global.asax.cs文件中的相关部分 - 我怀疑p的值不是一个整数,因此URL不能被正确路由。另外,开始使用HTTP嗅探器,例如Fiddler(IE的lugin)来查明幕后到底发生了什么。 – belugabob 2010-03-05 09:07:54

回答

2

对我来说好像你有你的路线有问题。如果不更改路线,则不能更改参数的名称。将您的方案工作路线是:

routes.MapRoute("MyRoute", 
      "MyController/MyAction/{p}", 
      new { controller = "MyController", action = "MyAction", p = "" } 
      ); 
0

这个函数是一个回调且不论成功或失败的将被调用。如果您打电话给web服务,请尝试在您的结果中包含成功= true/false属性。这样你可以做到以下几点

`$.post('../MyController/MyAction/' + p, function(result) { 
    if (!result.success) return; 

    alert("debug2"); 
    $('#panel').empty().html('<img src="../Content/images/ajax-loader.gif"/>'); 
    $('#panel').load('../Controller/Index'); 
});` 
+0

是的,这可能是一个好的IDE,但问题是执行没有进入我的行动方法。如果我将MyAction中的inparametername更改为id,而不是实际使用它的索引。 Someopne谁能解释? – karl 2010-03-05 09:19:28

+0

@mattias是正确的,在你的情况下,那么这是一个路由问题 – 2010-03-05 09:58:37

1

只要改变这样的:在Firebug

$.post('../MyController/MyAction/p=' + p, function() {