【问题标题】:how to call An ActionResult from Jquery如何从 Jquery 调用 ActionResult
【发布时间】:2013-08-05 05:07:02
【问题描述】:

这是我的 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);
}

它使用函数 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;
        }

    }

现在我的视图中有一个 ID 为“search-users”的按钮 以及我在 js 文件中的命令:

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

    });

如何将 HttpRequestBase 发布到控制器?

【问题讨论】:

  • 您是否在询问如何使用 AJAX 调用操作?您是否要调用与上述相同的操作?
  • 是的,完全是我认为的参数
  • 你的动作叫什么,它的参数是什么(如果有的话)?
  • 正是您在上面看到的 - 我的操作结果称为 Index ,我的视图参数是 - "user-name","first-name","last-name","status-search" ,"userTypes-search" 和 "busi-name"
  • 如果它有助于他们都在一个带有 id 的表单中 - “search-users-form”,那么数据可以被探测序列化,不是吗?

标签: asp.net asp.net-mvc jquery asp.net-mvc-4


【解决方案1】:

我无法完全回答这个问题,因为我不知道所有内容的结构。

无论对您的操作的调用是否使用 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);
}

在你看来,你希望你的按钮

  1. 使用 AJAX 发送请求
  2. 对响应做一些事情。

执行此操作的一种方法可能是让您的按钮向操作发送请求并让操作返回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);
            };
        }
    );
});

【讨论】:

    【解决方案2】:
    $.ajax({
                type: "GET",
                url: @Url.Action('actionname', 'controllername'),
                data: ({ param1: $('ctl').val(),...}),
                success: function (result) {
    //do something
                }
            });
    

    【讨论】:

    • 另外,您应该返回部分视图而不是控制器操作中的视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多