2012-03-20 63 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(); 
     } 

    } 
相关问题