2013-05-16 155 views
3

这是我之前没有遇到的问题。按钮点击事件不会触发事件

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

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

我去到设计选项卡,然后点击此按钮,其产生的事件处理程序:

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通过在设计模式中点击按钮创建事件。

+0

??你为什么做这个?你为什么需要Button助手?只是在表单中提交按钮,你有一个工作按钮。 –

+0

你为什么这样做?让我们从开始! Asp.Net MVC!= Asp.Net WebForms。没有事件!它基于HTTP的框架!看看这里寻求帮助:http://www.asp.net/mvc – Fals

回答

5

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

这并不令人惊讶。 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> 

其中ModelView你在包含一个属性,我称之为Id,即您要传入Undoid

+0

谢谢。很明显,我不知道MVC的基本原理。 – user2284341

+0

不是问题,这是一种***非常不同的思维方式。我真的很高兴我能得到帮助! –

0

我通常更喜欢打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" }; 
    } 

(对不起,任何拼写错误或语法错误。我从我们使用现有的代码拉在一个项目中。)

相关问题