1

这里发生了很多事情。

我有一个带有以下模板列的 Telerik MVC 网格:

@(Html.Telerik().Grid((IEnumerable<User)Model.Data)
  .Name("UsersGrid")
  .DataKeys(keys => keys.Add(c => c.UserName))
  .DataBinding(dataBinding => dataBinding.Server()
  .Columns(c =>
  {
    c.Bound(r => r.FullName).Title("");
    c.Bound(r => r.UserName).Title("");
    c.Template(
      @<text>
        @if(@item.Status == "Pending")
        {
           @Html.ActionLink("Resend Invite", "ResendInvite", new { Email = @item.UserName, FirstName = @item.FullName }, new { @class = "reesendInviteLink" })
        }
      </text>
    ).Title("Link").HtmlAttributes(new { Style = "text-align: right;" });
  }));

现在我知道 ActionLink 不会调用 post 操作,所以我使用 jquery 执行以下操作:

$(document).ready(function () {
   $(".resendInviteLink").click(function (e) {
      var url = e.currentTarget.href;
      $.post(url);
   });
});

我试图调用的 Action 方法如下所示:

[HttpPost]
public ActionResult ResendInvite(UserVM user)
{
   //....Do Something
}

当我调试 jquery 时,一切都很顺利,直到我到达 $.post 然后它失败说它在控制器上找不到 ResendInvite 操作。在某种程度上,我认为这是有道理的,因为 ActionLink 正在寻找 Get,而不是 Post。

那么如何在网格上创建一个链接:
1. 从 Telerik 网格中获取电子邮件和用户名。
2. 调用具有正确参数的后操作方法。

谢谢你的帮助。

4

1 回答 1

1

您的问题是,尽管您已经click event使用 Jquery 订阅了链接,但链接的原始链接click event仍然会触发一个失败的 Get 请求。

您需要使用 preventDefault方法

$(".resendInviteLink").click(function(e) {
    e.preventDefault();
    var url = e.currentTarget.href;
    $.post(url);
});

或者return false形成事件处理程序:

$(".resendInviteLink").click(function(e) {
    var url = e.currentTarget.href;
    $.post(url);
    return false;
});
于 2012-04-18T21:04:40.510 回答