从ajax调用获取查询字符串

时间:2012-12-28 14:42:02

标签: c# asp.net asp.net-mvc asp.net-mvc-3

您好我正在尝试从ajax调用获取一个查询字符串,它似乎没有那么好用。这是我的代码:

@Ajax.ActionLink("Add To Cart" ,
                             "AddToCart" ,
                             "Products", 
                             new {
                                    ProductId = @products.ElementAt(0).Value
                                 },
                             new AjaxOptions{
                                               Url = "/Products/AddToCart",
                                               InsertionMode = InsertionMode.Replace,
                                               UpdateTargetId = "UpdateCart",
                                               HttpMethod = "GET"
                                            })

我的应用程序中的每个链接都会调用这样的内容:

Products/AddToCart?ProductId=5

这是它所调用的控制器:

public ActionResult AddToCart(string ProductId)
    {
            string ProductCeva = ProductId;
    }

现在从我到目前为止学到的关于MVC3的内容我假设在我们的情况下参数ProductId将是5,但是当我调试代码时,我得到它是null。

我在这里做错了什么以及如何在此casE中获取ProductId查询字符串?

1 个答案:

答案 0 :(得分:4)

Url = "/Products/AddToCart",删除AjaxOptions位。

为什么?

这就是原因。以下代码:

@Ajax.ActionLink(
    "Add To Cart" ,
    "AddToCart" ,
    "Products", 
    new {
        ProductId = @products.ElementAt(0).Value
    },
    new AjaxOptions {
        Url = "/Products/AddToCart",
        InsertionMode = InsertionMode.Replace,
        UpdateTargetId = "UpdateCart",
        HttpMethod = "GET"
    }
)

产生

<a data-ajax="true" data-ajax-method="GET" data-ajax-mode="replace" data-ajax-update="#UpdateCart" data-ajax-url="/Products/AddToCart" href="/Products/AddToCart?ProductId=5">Add To Cart</a>

现在即使生成的锚的href是正确的(/Products/AddToCart?ProductId=5),也不是用于AJAX请求的那个。在发送AJAX请求而不是jquery.unobtrusive-ajax.js属性时,您正在使用的data-ajax-url以及不显眼的AJAX化所有锚点使用href属性(如果存在)。现在查看data-ajax-url属性的值,您就会明白为什么在控制器操作中得到null。

如果您使用过FireBug或类似的javascript调试工具,您也会看到这个,因为当您检查网络选项卡以查看为什么您的AJAX请求无法正常工作时,您会看到错误的网址被使用。

长话短说这个问题要记住两件事(第一件更重要,因为它可以推断出第二件):

  1. 使用FireBug
  2. Url的{​​{1}}属性允许您覆盖发送AJAX请求时要使用的网址。