2013-05-16 203 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" }; 
    } 

(對不起,任何拼寫錯誤或語法錯誤。我從我們使用現有的代碼拉在一個項目中。)