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>

很简单,但我在 Internet 或任何文档中都找不到对此的测试。有谁知道我会为此付出什么?

4

6 回答 6

1

据我记得,您的控制器操作如下所示:

public ActionResult MyAction(string accept, string decline)
{
    if (!string.IsNullOrEmpty(accept))
    {
        //do something
    }
    else 
    {
        //do something else
    }
}
于 2012-03-20T17:15:25.127 回答
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();
        }

    }
于 2012-03-20T17:17:24.043 回答
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。

于 2012-03-20T17:17:37.383 回答
0

通常在 c# 的代码隐藏中,您会寻找单击了哪个按钮。每个按钮都有一个事件处理程序,并且您的代码将根据单击的按钮做出反应。

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

然后你的方法

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

你会为另一个按钮设置相同的设置。

于 2012-03-20T17:10:24.123 回答
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())
    }
}
于 2012-03-20T17:11:19.827 回答
0

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

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

在后面的代码中:

protected void MyHandler1(object sender, EventArgs args)
{ /* do stuff */ }
于 2012-03-20T17:15:38.210 回答