使用MVC的Ajax(调用Web服务)

时间:2009-08-13 16:27:39

标签: asp.net-mvc ajax web-services

我有一个asp.net mvc应用程序,我需要在这个应用程序中使用ajax,我需要添加一个scriptmanager并添加一个服务引用与Web服务的路径,然后从标记调用Web服务。 我有以下代码,它没有看到Web服务:

<form>
<input id="SubmitBtn" type="button" value="Sumbit" onclick="TestService(); return false;" />
   <asp:ScriptManager ID="ScriptManager1" runat="server">
    <Services>
        <asp:ServiceReference Path="~/MVCService.asmx" />
    </Services>
    </asp:ScriptManager> 
<script type="text/javascript" language="javascript">  
    function TestService()
    {
        alert('Welcome');
        var ret = MVCService.HelloWorld(OnCheckComplete,OnFailed,OnTimeOut);
    }
    function OnCheckComplete(arg)
    {
         alert(arg);
    }
    function OnFailed(arg)
    {
        alert(arg);
    }
    function OnTimeOut(arg)
    {
        alert(arg);
    }
     </script>
</form>

它报告错误说:MVCService未定义 那我怎么能解决这个问题呢? 我是否需要在MVC应用程序中进行特定配置才能解决此问题? 我已经将ajax toolkit dll添加到我的应用程序参考中并且问题仍然存在

提前致谢

4 个答案:

答案 0 :(得分:2)

如果要切换到jQuery,只需将jQuery解决方案放在那里:

function TestService()
{
    alert('Welcome');

    $.ajax({
        url: "MVCService.asmx/HelloWorld",
        data: "{}",
        type: "POST",
        contentType: "application/json; charset=utf-8",
        processData: false,
        dataType: "json"
        success: function(msg) {
            alert(msg.d);
        }
    });
}

确保你有

using System.Web.Script.Services;
    [ScriptService]
public class MVCService : WebService
{
    [WebMethod]
    [ScriptMethod]
    public DateTime HelloWorld()
    {
        return DateTime.Now;
    }

答案 1 :(得分:1)

您是否尝试在MVC.NET页面中添加带有viewsate的控件?

我认为ScriptManager需要采用runat =“server”形式。

答案 2 :(得分:1)

感谢每一位我在以下链接找到问题的解决方案: Ajax with asp.net mvc

以下部分解决了我的问题:

<script type="text/javascript" src="../../Content/MicrosoftAjax.debug.js"></script>
<script type="text/javascript">   
function TestService() 
{  
   Sys.Net.WebServiceProxy.invoke("../../Services/MVCService.asmx","HellowWord", false,null, success, fail );
}
</script>

答案 3 :(得分:0)

或者 - 您可以使用常规控制器操作。

如果

  

“foo / bar”

路由配置为

  

controller =“foo”,action =“bar”

然后

$.get("foo/bar", data, callback, "html")  

使用jQuery会调用它。