如何在MVC.NET中使用Ajax调用从父类继承的方法

如何在MVC.NET中使用Ajax调用从父类继承的方法,ajax,asp.net-mvc,jquery-ui,Ajax,Asp.net Mvc,Jquery Ui,在我的应用程序中,我有一条控制信息 public class MessageController : BaseController { ... } BaseController是Abstract类,包含FindUserMessages方法。此方法必须在此控制器中,因为此“BaseController”与3个类似web应用程序中的父级一样使用,并且包含所有应用程序的通用功能 public abstract class BaseController : Controller { [A

在我的应用程序中,我有一条控制信息

public class MessageController : BaseController
{
   ...
}
BaseController是Abstract类,包含FindUserMessages方法。此方法必须在此控制器中,因为此“BaseController”与3个类似web应用程序中的父级一样使用,并且包含所有应用程序的通用功能

public abstract class BaseController : Controller
{
    [Authorize]
    [HttpPost]
    [AcceptVerbs(HttpVerbs.Post)]
    public JsonResult FindUser(string userName, int maxRecords)
    {
        try
        {
            return Json(new JsonResult()
                {
                    IsError = false,
                    ErrorMessage = string.Empty,
                    Data = (from u in AccountModel.FindUser(userName, false).Take(maxRecords)
                            select new
                            {
                                UserName = u.UserName,
                                UserId = u.ProviderUserKey,
                                IsOnlien = u.IsOnline
                            })
                });
        }
        catch (Exception ex)
        {
            ...
        }
    }
}
我想使用这个方法来创建一个JqueryUI自动完成小部件的源代码。我试图通过Ajax调用此方法:

$("#txtQuickMessageSendTo").autocomplete({
    source: function (request, response) {
        $.ajax({
            url: "/Message/FindUser",
            data: {
                userName: request.term,
                maxRecords: 10
            },
            success: function (resultObj) {
                if (resultObj.IsError) {
                    handleAjaxError(null, null, null, null, resultObj.ErrorMessage, null);
                    return;
                }
                else {
                    response($.map(data.Data, function (item) {
                        return { 
                            label: item.UserName,
                            value: item.ProviderUserKey
                        }
                    }));
                }
            }
        });
    },
    minLength: 2,
    select: function (event, ui) {
        //log(ui.item ? "Selected: " + ui.item.label : "Nothing selected, input was " + this.value);
    },
    open: function () {
        $(this).removeClass("ui-corner-all").addClass("ui-corner-top");
    },
    close: function () {
        $(this).removeClass("ui-corner-top").addClass("ui-corner-all");
    }
});
我使用Fiddler2进行Web调试,请求中的都是参数(用户名和maxRecords),但服务器抛出错误:

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly. 

Requested URL: /Message/FindUserForMessages
参数是可以的,但是为什么我不能调用这个方法呢


谢谢

FindUser方法只接受post。删除[HttpPost]属性(需要使用JsonRequestBehavior.AllowGet-unrecommed),或者确保jquery ajax选项指定type=post

1)您的错误消息说您试图访问
FindUserMessages
方法。但是代码中的方法是
FindUser

2)此外,始终使用Html帮助器方法获取操作方法的路径。因此,替换

url: "/Message/FindUser",

3)默认情况下,ajax操作类型为
GET
。您的操作方法由
[HttpPost]
attAttribute修饰。因此,要么从那里删除它,要么在调用ajax时提及它。还要确保您确实需要
Authorize
属性来满足您的需求

public JsonResult FindUser(string userName, int maxRecords)
{
  return Json( new { YourJsonDemo="replace here" }, 
                                                  JsonRequestBehaviour.AllowGet);
}
或者在客户端这样做,说这是一个
POST
请求

 $.ajax({
          url: "@Url.Action("FindUser","Message")",
          type: 'POST',
         //remaining code
 $.ajax({
          url: "@Url.Action("FindUser","Message")",
          type: 'POST',
         //remaining code