如何使用jQuery发布时在Action Method中访问Http Post值

时间:2012-02-02 16:32:01

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

我正在探索asp.net mvc,因为我想从Webforms切换。我只是试图尝试使用jQuery发布一个字符串并在响应中获取该字符串。但是,我不知道如何在控制器的action方法中访问post参数。

我尝试使用FormCollection但是它是空的(我猜这是显而易见的,因为我使用jQuery ajax调用而不是表单发布)

 $(function () {
        $("#GetReport").click(function () {
            $.ajax({
                type: 'POST',
                url: '/Reports/GetReport',
                data: 'Abracadabra Mercedes',
                contentType: 'application/text;charset=utf-8',
                dataType: 'text',
                success: function (result) {
                    alert(result);
                }


            });
        });
    });

//Controller Code
public class ReportsController : Controller
    {
        //
        [HttpPost]
        public ActionResult GetReport(string query)
        {


            ViewBag.Result = "Hello";

            ViewBag.Geronimo = query;

            return View();

        }

    }

        //View Code
@{
    Layout = null;
}

@ViewBag.Result + @ViewBag.Geronimo

1 个答案:

答案 0 :(得分:1)

您的“数据”必须是URL上的键/值列表。然后,您将把这些信息传递到Action方法的查询参数中。

e.g。

$(function () {
    $("#GetReport").click(function () {
        $.ajax({
            type: 'POST',
            url: '/Reports/GetReport',
            data: 'query=Abracadabra Mercedes',
            success: function (result) {
                alert(result);
            }


        });
    });
});

有关详细信息,请参阅http://www.tugberkugurlu.com/archive/working-with-jquery-ajax-api-on-asp-net-mvc-3-0-power-of-json-jquery-and-asp-net-mvc-partial-views

在那个例子中,你可以看到他正在这样做。寻找:

var d = "itemId=" + itemId;

编辑:我刚刚在这里试过

<input type="button" value="Click" id="GetReport" />
<input type="text" id="tester"/>

<h2>Index</h2>
<script type="text/javascript">
$(function () {
    $("#GetReport").click(function (e) {
        var d = "input=" + $('#tester').val();
        debugger;
        $.ajax({
            type: 'POST',
            url: '/Home/test',
            data: d,
            success: function (result) {
                alert(result);
            }

        });

        if (e && e.preventDefault) {
            e.preventDefault();
        }
    });
});

public class HomeController : Controller
{
    [HttpPost]
    public ActionResult Test(string input)
    {
        return new ContentResult() { Content = input };
    }