我可以在MVC控制器中使用此方法吗?我怎么能从ajax中调用它?

时间:2014-09-13 07:29:01

标签: ajax asp.net-mvc ado.net

[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static object GetBeneficiaryAccount()
{
    ClsBeneficiaries obj = new ClsBeneficiaries();
    var List = new List<ClsBeneficiaries>();
    List = obj.GetAllBeneficiariesAccout();
    var result = List.Select(a => new
    {
        Account_ID = a.Account_ID,
        Name = a.Name,
    });
    return result;
}

我是mvc的新人。我在我的asp应用程序中使用了这个方法,但现在我想学习asp mvc。

所以任何人都可以帮助我,我可以在控制器中使用脚本方法以及如何从Ajax调用此方法?

2 个答案:

答案 0 :(得分:0)

你可以使用JsonResult。

[HttpGet]
public JsonResult GetBeneficiaryAccount()
{ 
    ClsBeneficiaries obj = new ClsBeneficiaries();
    var List = new List<ClsBeneficiaries>();
    List = obj.GetAllBeneficiariesAccout();
    var result = List.Select(a => new
    {
        Account_ID = a.Account_ID,
        Name = a.Name,
    });

    return Json(result, JsonRequestBehavior.AllowGet);
}

答案 1 :(得分:0)

Asp.Net Asmx解决方案

为此,您需要创建一个.asmx文件,添加新项目菜单
据我所知,您在mvc项目中调用asp.net asmx Web服务以实现向后兼容性。所以,如果你真的需要从asp.net mvc项目中调用.asmx web服务,那么这就是你要做的步骤。
首先将路由条目添加到 App_Start - &gt; RouteConfig.cs 文件

routes.IgnoreRoute("{resource}.asmx/{*pathInfo}");

这将在asp.net mvc中的路由引擎中忽略以.asmx结尾的路径。
接下来,转到web.config文件和System.Web

中的以下条目
  <webServices>
    <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
    </protocols>
</webServices>

很好,现在如果您从浏览器调用.asmx服务(在我的情况下是 webservice1.asmx ),您应该看到这样的响应; enter image description here
如果您感到焦虑,请参阅我的WebMethod

        [WebMethod]
        [ScriptMethod(UseHttpGet = true)]
        public string HelloWorld()
        {
            return "Hello World";
        }

现在你可以使用jQuery测试它,就像常规的 Ajax 调用一样,它应该可以工作;

        <script>
            $(function () {
                $.get('/webservice1.asmx/HelloWorld', function (data) {
                    alert('');
                    alert(data);
                });
                alert('after');
            });
        </script>

是的,如果您首先看到之后,因为它是异步调用,请不要感到惊讶。

MVC解决方案

您无法从Controller调用WebMethod。如果您需要从控制器返回json,那么您只需通过HttpGet修饰您的操作方法,然后返回JsonResult

[HttpGet]
    public JsonResult GetBeneficiaryAccount()
    {
        ClsBeneficiaries obj = new ClsBeneficiaries();
        var List = new List<ClsBeneficiaries>();
        List = obj.GetAllBeneficiariesAccout();
        var result = List.Select(a => new
        {
            Account_ID = a.Account_ID,
            Name = a.Name,
        });

        return Json(result, JsonRequestBehavior.AllowGet);
    }

现在,您只需使用jQuery调用它;

<script>
        $(function () {
            $.get('/YourControllerName/GetBeneficiaryAccount', function (data) {
                alert(data);
                //do something
            });
        });
    </script>

由于您不熟悉MVC,我建议您遵循MVC解决方案,该解决方案只返回JSON数据。