Различное поведение для двух разных кнопок отправки? - PullRequest
3 голосов
/ 20 марта 2012

Я пытаюсь добавить в форму две кнопки отправки - одна принимает встречи; другой отказывается от них. Они оба будут вести себя по-разному. Как я могу сделать это в моем коде 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 ]

1 голос
/ 20 марта 2012

Дайте каждому элементу кнопки одно и то же имя (в данном примере '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 на клиенте до отправки запроса на публикацию.

1 голос
/ 20 марта 2012

Предполагая, что вы используете 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();
        }

    }
1 голос
/ 20 марта 2012

Насколько я помню, у вас есть действие контроллера, похожее на это:

public ActionResult MyAction(string accept, string decline)
{
    if (!string.IsNullOrEmpty(accept))
    {
        //do something
    }
    else 
    {
        //do something else
    }
}
0 голосов
/ 20 марта 2012

ASP.NET Button имеет событие OnClick, поэтому добавьте разные обработчики для каждой кнопки:

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

в коде:

protected void MyHandler1(object sender, EventArgs args)
{ /* do stuff */ }
0 голосов
/ 20 марта 2012

Одно из возможных решений - использовать две кнопки типа 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 голосов
/ 20 марта 2012

Как правило, в коде позади c # вы будете искать, какая кнопка была нажата.У вас будет обработчик событий для каждой кнопки, и ваш код будет реагировать в зависимости от того, какая кнопка была нажата.

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

А затем ваш метод

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

И у вас будетЖЕ установлен для другой кнопки.

...