1

我有一个 ASP.Net MVC 应用程序。我正在尝试将数据发布到一个动作,然后只渲染输出。我有一个页面,您可以在其中查看产品,因此 www.mysite.com/product/details/1 显示该产品。在这个页面上,我通过 RenderAction() 渲染了一个包含一些定价逻辑的局部视图。我希望用户选择一些选项,然后让 jquery 发布选项以获得新价格。

但是,当我打电话时

$.post({
  url : "price/getprice",
  data : {"options" : chosenOptions},
  success : function(data) {
              $("#price").text(data);
            }
});

网址正在发布到www.mysite.com/product/details/price/getprice不存在的位置。我试过发布到“~/price/getprice/”,但它做同样的事情。为什么它不会转到我的 PriceController 的 GetPrice(FormCollection form) 操作?

这应该发布到www.mysite.com/price/getprice. 当我在 firebug 中查看 Net 选项卡时,它说它正在发布:

http://localhost:42427/Product/Details/%5Bobject%20Object%5D

如果我查看 Firebug 中的响应,应用程序会抛出异常:

参数字典包含“PrintPlaceWebsite.Controllers.ProductController”中方法“System.Web.Mvc.ActionResult Details(Int32)”的不可空类型“System.Int32”的参数“id”的空条目。

但我并不想在那个位置发帖,所以......呃。

4

5 回答 5

5

好吧,您指定了一个相对 URL,因此如果此代码在 site 上www.mysite.com/a/b/c,则 URL 将指向/a/b/price/getprice.

您可能想要指定一个绝对 URL:

$.post({
  url : "/price/getprice",
  //     ^-- leading slash
  data : {"options" : chosenOptions},
  success : function(data) {
              $("#price").text(data);
            }
});
于 2010-07-22T19:44:41.957 回答
0

据 JQuery 所知,它的 AJAX 调用基于当前位置,我猜是 www.mysite.com/product/details/。就像您有一个指向“myPage.html”的链接一样,您会尝试访问 www.mysite.com/product/details/myPage.html。

我建议你用类似的东西解析你的视图中的 URL。

<% = ResolveUrl("~/price/getprice") %>
于 2010-07-22T19:49:27.477 回答
0

似乎 URL 路由器把事情搞混了。只需将路径替换为绝对(完整)路径即可。

$.post({
  url : "http://mywesbite.com/price/getprice",
  data : {"options" : chosenOptions},
  success : function(data) {
          $("#price").text(data);
        }
});
于 2010-07-22T19:56:29.933 回答
0

所以,事实证明这是我的一个小错字(其他人都是因为你们都复制了它)。

重申:

$.post({
  url : "/price/getprice",
  data : {"options" : chosenOptions},  <<<<< Right here. dang.
  success : function(data) {
          $("#price").text(data);
        }
});

你看到了吗?

$.post({
  url : "/price/getprice",
  data : { options : chosenOptions},  <<<<< no quotes. arg.
  success : function(data) {
          $("#price").text(data);
        }
});
于 2010-07-22T20:19:25.617 回答
0

对我有用的是:

在视图中:添加

<span data-url="@Url.Content("~/ControllerName/ActionName")" id="getValues" class="hidden"></span>

注意:确保使用正斜杠('/')

在 Jquery 文件中,

var getValues = $('span#getValues').attr('data-url');

在 Ajax 调用中,设置

 $.ajax({
            type: 'GET',
            url: getValues,
            data: { id: abc},
            cache: false,
            success: function(result) {
             }
       }); 
于 2016-09-23T16:35:43.367 回答