两个不同的提交按钮的不同行为?

时间:2012-03-20 17:08:05

标签: html razor asp.net-webpages

我想在我的表单中设置两个提交按钮 - 一个接受会议;另一个拒绝他们。他们都会有不同的行为。我怎么能用我的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>

很简单,但我无法在互联网或任何文档中找到对此的测试。有谁知道我会为此做些什么?

6 个答案:

答案 0 :(得分:1)

据我记忆,你有一个控制器动作如下:

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

答案 1 :(得分: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();
        }

    }

答案 2 :(得分:1)

为每个按钮元素指定相同的名称(在此示例中为“SubmitButton”),但使用不同的值,然后检查服务器代码中的不同值,即:

<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
}

请注意,这在某些早期版本的IE上不起作用,并且您可能必须在发布请求之前在客户端上执行一些小的JavaScript。

答案 3 :(得分:0)

通常在c#的代码隐藏中,你会找到点击的按钮。你有一个每个按钮的事件处理程序,你的代码会根据点击的按钮做出反应。

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

然后你的方法

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

你可以为另一个按钮设置SAME。

答案 4 :(得分: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())
    }
}

答案 5 :(得分:0)

ASP.NET按钮控件具有OnClick事件,因此为每个按钮添加不同的处理程序:

<asp:Button OnClick="MyHandler1" ... />
代码背后的

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