0

嗨,我正在尝试从 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,但是当我调试代码时,我得到它是空的。

我在这里做错了什么,如何在这种情况下获取 ProductId 查询字符串?

4

1 回答 1

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,您正在使用并且不显眼地 AJAX 化所有锚的 使用data-ajax-url属性(如果存在)href。现在看看data-ajax-url属性的值,你就会明白为什么在你的控制器动作中得到 null 了。

如果您使用过 FireBug 或类似的 javascript 调试工具,您也会看到这一点,因为当您检查“网络”选项卡以查看为什么您的 AJAX 请求不起作用时,您会看到使用了错误的 url。

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

  1. 使用萤火虫
  2. Url属性AjaxOptions允许您在发送 AJAX 请求时覆盖要使用的 url。
于 2012-12-28T14:52:45.090 回答