1

我正在尝试像这样将值传递给 Url.Action

     $('._select_change').change(function(n)
     {
         var param = n.target.value;

         $.get('@Url.Action("List", new { someid = param } )', function (data) {
             $('#changeArea').replaceWith(data);
         });

     });

如果我设置 someid = '123',那么该值可以很好地进行。但是,当我替换为 someid = param - 我得到一个编译器错误“CS0103:当前上下文中不存在名称'param'”......

我应该如何构造这个方法调用?

谢谢

4

2 回答 2

1

我应该如何构造这个方法调用?

像这样:

$('._select_change').change(function() {
    var param = $(this).val();
    $.get('@Url.Action("List")', { someid: param }, function (data) {
         $('#changeArea').replaceWith(data);
    });
});

请注意我如何使用该$.get()方法的第二个参数将查询字符串参数从客户端传递给 AJAX 调用。

这会将下拉列表的选定值传递给采用someidaction 参数的 List 控制器操作:

public ActionResult List(string someid) 
{
    ...
}

因此,您将在 javascript 调试工具的 Net 选项卡中看到以下 AJAX 请求正在发送到服务器:

GET /somecontroller/List?someid=123

$.get()但是,如果您使用这种方法,您应该注意一件事。GET 请求通常由浏览器缓存。这意味着如果您向同一个 url 发送许多请求,例如/list?someid=123浏览器可以缓存结果,并且只有第一个请求会到达服务器。但是,如果您想每次都提供新数据并且想为每个请求访问服务器怎么办。在这种情况下,推荐的解决方案是使用$.ajax()允许您禁用缓存的方法:

$('._select_change').change(function() {
    var param = $(this).val();
    $.ajax({
        url: '@Url.Action("List")',
        data: { someid: param },
        cache: false,
        success: function (data) { 
            $('#changeArea').replaceWith(data);
        }
    });
});

这将在每个请求上附加一个随机查询字符串参数,以确保结果不被客户端浏览器缓存。

于 2013-01-07T22:45:46.777 回答
1
$.ajax({
            url: YourURL,
            type: "post",
           data: $('form').serialize(), // one way of submitting full form
           data: { id: "your ID", name: "your name" }, // if you have less parameters use this 
            success: function (data) {
                // handle it

            },
            error: function (data) {
                // handle your error
            },
            dataType: "JSON"
            //async:true
        });
于 2013-01-07T22:46:58.923 回答