используя две кнопки отправки внутри одной формы - PullRequest
5 голосов
/ 11 марта 2010

У меня есть форма с двумя кнопками отправки в моем приложении asp.net mvc (C #). Когда я нажимаю любую кнопку отправки в Google Chrome, по умолчанию значение кнопки отправки является значением первой кнопки отправки.

Вот HTML:

 <input type="submit" value="Send" name="SendEmail" />
 <input type="submit" value="Save As Draft" name="SendEmail" />
 <input type="button" value="Cancel" />

Когда я нажимаю кнопку Save As Draft, в действии контроллера он получает «Отправить» в качестве значения для SendEmail.

Вот действие:

public ActionResult SendEmail(string SendEmail, FormCollection form)
 {
       if(SendEmail == "Send")
       {
          //Send Email
       }
       else
       {
          //Save as draft
       }
       return RedirectToAction("SendEmailSuccess");
 }

Когда я получаю значение из FormCollection, он показывает «Отправить». то есть form["SendEmail"] дает Send

В чем может заключаться проблема или обходной путь, который мне нужно сделать, чтобы получить действительное значение нажатой кнопки отправки?

Ответы [ 4 ]

7 голосов
/ 11 марта 2010

Показать эту страницу.

ASP.NET MVC - Несколько кнопок в одной форме - Блог Дэвида Финдли

Создать наследующий класс ActionMethodSelectorAttribute.

5 голосов
/ 11 марта 2010

Попробуйте вместо этого:

<input type="submit" value="Send" name="send" />
<input type="submit" value="Save As Draft" name="save" />

и

public ActionResult SendEmail(string send, FormCollection form)
{
    if (!string.IsNullOrEmpty(send))
    {
        // the Send button has been clicked
    } 
    else
    {
        // the Save As Draft button has been clicked
    }
}
1 голос
/ 17 мая 2013

Скрытые HTML-элементы будут отправлены вместе с вашей формой, поэтому вы можете добавить скрытый элемент и изменить его по нажатию кнопки перед отправкой. Верните true, чтобы продолжить отправку формы.

@Html.Hidden("sendemail", true)
<input type="submit" value="Send"
       onclick="$('#sendemail').val(true); return true" />
<input type="submit" value="Save As Draft"
       onclick="$('#sendemail').val(false); return true;" />

Теперь вы можете просто извлечь значение из вашей коллекции форм.

public ActionResult SendEmail(FormCollection form)
{
   if(Boolean.Parse(form["sendemail"]))
   {
      //Send Email
   }
   else
   {
      //Save as draft
   }
   return RedirectToAction("SendEmailSuccess");
}

Вместо непосредственного использования FormCollection рекомендуется создать модель представления, содержащую указанное свойство.

Просмотр модели

public class FooViewModel
{
  public bool SendEmail { get; set; }
  // other stuff
}

HTML

// MVC sets a hidden input element's id attribute to the property name, 
// so it's easily selectable with javascript
@Html.HiddenFor(m => m.SendEmail)

// a boolean HTML input can be modified by setting its value to
// 'true' or 'false'
<input type="submit" value="Send"
       onclick="$('#SendEmail').val(true); return true" />
<input type="submit" value="Save As Draft"
       onclick="$('#SendEmail').val(false); return true;" />

Действие контроллера

public ActionResult SendEmail(FooViewModel model)
{
   if(model.SendEmail)
   {
      //Send Email
   }
   else
   {
      //Save as draft
   }
   return RedirectToAction("SendEmailSuccess");
}
0 голосов
/ 11 марта 2010

обходной путь: используйте javascript для отправки формы вместо кнопок отправки

...