如何从Jquery调用一个ActionResult

bar*_*rin 2 asp.net asp.net-mvc jquery asp.net-mvc-4

这是我的ActionResult

{          

    UsersModel um = new UsersModel();
    um.Users = userRepository.GetAllUsers();
    um.UserCustomers = userRepository.GetAllUserCustomerConnections();
    um.UserTypes = enums.GetAllDescriptions(CodeType.UserType);
    um.Customers = userRepository.GetAllCustomers();
    um = SearchUsers(Request,um);
    return View(um);
}
Run Code Online (Sandbox Code Playgroud)

它使用SearchUsers功能:

    private UsersModel SearchUsers(HttpRequestBase request, UsersModel curModel)
    {
        try
        {
            // request parameters
            string userName = request.Params["user-name"];
            string firstName = request.Params["first-name"];
            string lastName = request.Params["last-name"];
            int status,type,businessId;

            if (!string.IsNullOrWhiteSpace(userName))
                curModel.Users = curModel.Users.Where(u => u.Username.Contains(userName));
            if (!string.IsNullOrWhiteSpace(firstName))
                curModel.Users = curModel.Users.Where(u => u.FirstName.Contains(firstName));
            if (!string.IsNullOrWhiteSpace(lastName))
                curModel.Users = curModel.Users.Where(u => u.LastName.Contains(lastName));
            if (int.TryParse(request.Params["status-search"], out status))
                curModel.Users = curModel.Users.Where(u => u.Status == status);
            if (int.TryParse(request.Params["userTypes-search"], out type))
                curModel.Users = curModel.Users.Where(u => u.UserType == type);
            if (int.TryParse(request.Params["busi-name"], out businessId))
                curModel.Users = curModel.Users.Where(u => u.LastCustomerId == businessId);

            return curModel;
        }
        catch
        {
            return curModel;
        }

    }
Run Code Online (Sandbox Code Playgroud)

现在我在我的视图中有一个id为"search-users"的按钮和我在js文件中的命令:

$('#search-users').click(function () { 

    });
Run Code Online (Sandbox Code Playgroud)

我如何将HttpRequestBase发布到控制器?

Row*_*man 10

我无法完全回答这个问题,因为我不确切知道一切是如何构建的.

无论对您的操作的调用是否使用AJAX,您在请求期间仍将拥有相同的对象.这意味着您仍将拥有一个Request类型的对象HttpRequestBase.这是个好消息; 这意味着处理AJAX请求相对简单.

首先,决定如何处理你的动作,以便它适合与AJAX一起使用.您可以使用Request.IsAjaxRequest()分支逻辑.

例如:

{          
    UsersModel um = new UsersModel();
    um.Users = userRepository.GetAllUsers();
    um.UserCustomers = userRepository.GetAllUserCustomerConnections();
    um.UserTypes = enums.GetAllDescriptions(CodeType.UserType);
    um.Customers = userRepository.GetAllCustomers();
    um = SearchUsers(Request,um);
    if (Request.IsAjaxRequest())
    {
        return PartialView(um);
    }
    return View(um);
}
Run Code Online (Sandbox Code Playgroud)

在您的视图中,您需要按钮

  1. 使用AJAX发送请求
  2. 做一些回应.

执行此操作的一种方法可能是您的按钮向操作发送请求以及操作返回a PartialView(如上例所示).这意味着您需要使用返回的HTML替换页面的内容.

你的按钮看起来是一个好的开始.

您需要使用AJAX脚本来解释要请求的URL,要发送的一些数据以及响应的内容(至少).示例(非功能性,这只是一个指南):

$('#search-users').click(function () { 
    $.ajax({
        url: "@Url.Action("Index", "MyController")",
        data: {user-name: $("#user-name").val(),
               first-name: $("#first-name").val(),
               last-name: $("#last-name").val()},
        success: function(data) {
                $("#content").html(data);
            };
        }
    );
});
Run Code Online (Sandbox Code Playgroud)