您好我正在尝试从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查询字符串?
答案 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请求无法正常工作时,您会看到错误的网址被使用。
长话短说这个问题要记住两件事(第一件更重要,因为它可以推断出第二件):
Url
的{{1}}属性允许您覆盖发送AJAX请求时要使用的网址。