【问题标题】:AJAX calling different action on controllerAJAX 在控制器上调用不同的操作
【发布时间】:2018-10-22 07:17:29
【问题描述】:

AJAX 方法:

$(".GetF").click(function (e) {
    e.preventDefault();
    $.post('@Url.Action("test1", "flyer")', { "selectedIds": "1"})
                    .done(function (data) {
                        alert("Data Loaded: " + data);
                    });
});

控制器动作:

    [HttpPost]
    public ActionResult test1(string selectedIds)
    {
       ......
       return Json(list, JsonRequestBehavior.AllowGet);
    }

每次我进行这个 ajax 调用时,它只调用以下方法

[HttpPost]
public ActionResult Index(FViewModel vm)
{
}

我尝试将方法更改为 HTTPGet 和对 type='get' 的 ajax 调用,但这也不起作用。

我无法确定这里的问题到底是什么。请注意,页面上没有提交按钮或表单。写入点击事件的元素只是普通的链接。

【问题讨论】:

  • 将发布 URL 存储在一个变量中,并检查它的值可能是 null。
  • @RajanMishra : url 没有变量。如果我只是通过“/flyer/test1”调用,那么它也不起作用。
  • 您确定是@Url.Action("test1", "flyer") 而不是@Url.Action("test1", "Flyer")?也可以试试{ selectedIds: "1"}
  • @TetsuyaYamamoto :以上建议不走运。
  • 试试这个 $.post("test1/flyer", JSON.stringify({ "selectedIds": "1"}))

标签: ajax asp.net-mvc action


【解决方案1】:

这可能是您的路由问题。 请尝试在不使用 Url.Action() 的情况下发布到端点,以帮助排除路由问题。 例如 $.post('http://localhost:53149/test1', { selectedIds: "1"})

显然,您需要将上面的端口 (53149) 替换为您自己的,但这应该有助于找出问题所在。 如果直接链接问题仍然存在,请检查您的路由表并确保您的 test1 方法在被您的索引方法捕获之前会被命中。

【讨论】:

    【解决方案2】:

    .GetF 类来自按钮?

    我认为它是您正在单击的按钮,并且此按钮 type 是提交,您正在索引页面中工作。

    更改您的按钮type="button",您不需要使用e.preventDefault();

    $.post('@Url.Action("test1", "flyer")',
                    {
                        selectedIds: '1',
                    }).done(function (data) {
    });
    

    我认为这会解决您的问题。

    【讨论】:

    • 没有。它不是一个按钮。这只是一个链接。...
    猜你喜欢
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多