2012-03-20 88 views
3

我想在我的表單中有兩個提交按鈕 - 一個接受會議;另一個拒絕他們。他們都會有不同的行爲。我怎麼能在我的C#代碼?兩種不同的提交按鈕的不同行爲?

我想要的功能基本上是

if(isPost) { 
    if(//accept button pressed(Request.Form[???])) 
    { 

    } 
    else 
    { 


    } 
} 

這裏是我的HTML:

<button name="accept" type="submit">Accept</button> 
<div class="spacer"></div> 
<button name="decline" type="submit">Decline</button> 
<div class="spacer"></div> 

很簡單,但我找不到這樣的測試在互聯網上或任何文檔。有誰知道我會爲此做些什麼?

+0

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.click.aspx – Stefan 2012-03-20 17:10:18

+0

我當時希望有一種更簡單的方法來用.cshtml網頁來做到這一點! :) – 2012-03-20 17:12:19

+0

您已標記爲asp.net和剃鬚刀,您是否使用MVC3。 – 2012-03-20 17:12:56

回答

1

給每個按鈕元件相同的名稱(在該例子中,「提交按鈕」),但具有不同的值,然後執行對不同的值進行檢查在服務器代碼,即:

<button type="submit" name="SubmitButton" value="Accept">Accept</button> 
<button type="submit" name="SubmitButton" value="Decline">Decline</button> 

然後在您的服務器代碼:

string buttonClicked = Request.Form["SubmitButton"] 
if(buttonClicked == "Accept") 
{ 
    // Accept code 
} 
else if(buttonClicked == "Decline") 
{ 
    // Decline code 
} 

要知道,這不會w ^儘管在IE的一些早期版本上使用了ork,並且在發佈發佈請求之前,您可能必須在客戶端上執行一些JavaScript操作。

+0

這是最簡單的解決方案,完全是我想要的簡單功能,非常感謝! – 2012-03-20 17:54:41

0

通常在c#中的代碼隱藏中,你會在尋找哪個按鈕被點擊。你會爲每個按鈕設置一個事件處理程序,並且你的代碼會根據點擊哪個按鈕做出反應。

this.btnRejectAppointment.Click += new System.EventHandler(this.btnRejectAppointment_Click); 

然後你的方法

private void btnRejectAppointment_Click(object sender, System.EventArgs e) 
{ 
    //code to reject appt. 
} 

而且你必須爲其他按鈕同一組。

0

一個可能的解決方案 - 使用LinkButton類型的兩個按鈕,但規定稍微不同PostBackUrl

<!-- Accept meeting button --> 
<asp:LinkButton ID="acceptMeeting" runat="server" 
       PostBackUrl="MeetingsManager.aspx?Mode=Accept" /> 

<!-- Decline meeting button -->  
<asp:LinkButton ID="declineMeeting" runat="server" 
       PostBackUrl="MeetingsManager.aspx?Mode=Decline" /> 

而且在後面的代碼:

public enum Mode 
{ 
    Unknown, 
    Accept, 
    Decline 
} 

protected void Page_Load(object sender, EventArgs args) 
{ 
    Mode currentMode = Mode.Unknown; 
    var rawMode = Request.QueryString["Mode"]; 
    if (rawMode != null) 
    { 
     currentMode = (Mode)Enum.Parse(
           typeof(Mode), 
           rawMode.ToString()) 
    } 
} 
+0

這不是一個很乾淨的方法來做到這一點。由於人們可能會混淆查詢字符串,在頁面上有兩個按鈕,每個都有自己的鏈接事件處理程序和處理方法,這是更好的方法。 – 2012-03-20 17:15:17

+0

你可以通過方法來分開處理 – sll 2012-03-20 17:17:14

+0

s'pose適用於asp.net mvc而不是webforms模型 – coalvilledave 2012-03-21 14:02:19

1

至於我記得,你有控制器動作看起來像這樣:

public ActionResult MyAction(string accept, string decline) 
{ 
    if (!string.IsNullOrEmpty(accept)) 
    { 
     //do something 
    } 
    else 
    { 
     //do something else 
    } 
} 
0

ASP.NET但在代碼

<asp:Button OnClick="MyHandler1" ... /> 

背後:噸控件有OnClick事件,因此不同的處理程序添加到每一個你的按鈕

protected void MyHandler1(object sender, EventArgs args) 
{ /* do stuff */ } 
1

假設你正在使用MVC3,你會做這樣的事情

@using (Html.BeginForm("Accept","Meeting")) 
{ 
    <input type="submit" value="Accept" /> 
} 
@using (Html.BeginForm("Decline","Meeting")) 
{ 
    <input type="submit" value="Decline" /> 
} 

然後,您只需在會議控制器的「接受和拒絕」操作中分別接受和拒絕代碼。根本不需要if語句。

實施例控制器

public class MeetingController : Controller 
    { 
     [HttpPost] 
     public ActionResult Accept() 
     { 
      //Do accept stuff 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult Decline() 
     { 
      //Do decline stuff 
      return View(); 
     } 

    } 
相關問題