事件未触发按钮单击事件

本文关键字:事件 单击 按钮 | 更新日期: 2023-09-27 18:14:01

这是我以前没有遇到过的问题。

我正在做一个MVC4项目。我使用asp按钮控件,因为没有一个Html Helper可以用于按钮(re: there 's no @Html)。按钮!)。我的按钮代码是:

<td><asp:Button ID="ButtonUndo" runat="server" Text="Undo" 
                        OnClick="ButtonUndo_Click" AutoPostBack="true"/></td>

我转到Designer选项卡并单击产生事件处理程序的这个按钮:

protected void ButtonUndo_Click(object sender, EventArgs e)
{
    RRSPSqlEntities db = new RRSPSqlEntities();
    int id = (int)ViewData["ClientId"];
    var updateAddress = (from a in db.Address
                             where a.PersonId == id
                             select a).SingleOrDefault();
    updateAddress.Deleted = false;
    db.SaveChanges();
}

我应该补充说,这段代码被添加到同一个.aspx页面包装在一个脚本标签。在这个部分中还有Page_Load方法。事件处理程序不在Page_Load中。

当我设置一个断点并分步执行代码时发现了这个问题。单击我的按钮显示它根本没有击中我的事件处理程序。我不知道为什么会这样,特别是ASP在设计模式下通过点击按钮来创建事件。

事件未触发按钮单击事件

单击我的按钮显示它根本没有击中我的事件处理程序。

这并不那么令人惊讶。ASP。. NET MVC使用完全不同的事件模型(也就是说,它没有像web表单那样的事件模型)。然而,你要做的是非常直接的。在控制器中创建一个新方法,命名为Undo:

public ActionResult Undo(int id)
{
    RRSPSqlEntities db = new RRSPSqlEntities();
    var updateAddress = (from a in db.Address
                             where a.PersonId == id
                             select a).SingleOrDefault();
    updateAddress.Deleted = false;
    db.SaveChanges();
    return View("{insert the original action name here}");
}

然后在你的标记中,简单地像这样标记input:

<form method="POST" action="/ControllerName/Undo">
    @Html.HiddenFor(Model.Id)
    <input type="submit" value="Undo" />
</form>

其中ViewModel包含一个属性,我称之为Id,这是你想传递给Undoid

我通常更喜欢进行ajax调用。你可以试试:

    <button type="button" class="button" onclick="ButtonUndo();" />

格式为:

    <script>
        function ButtonUndo() {
            $.ajax({
                    type: 'POST',
                    url: '/controller/action',
                    data: 'PersonID=' + ID,
                    dataType: 'json',
                    cache: false,
                    success: function (result) {
                        //do stuff here
                    },
                    error: function () {
                        //do error stuff here
                    }
            });
        }
    </script>

控制器:

    [HttpPost]
    public ActionResult Action(int PersonID)
    {
        //Do your stuff here
        return new JsonResult { result = "something" };
    }

(抱歉任何打字错误或语法错误…我从我们在项目中使用的现有代码中提取。)