5

asp.net mvc (C#) アプリケーションに 2 つの送信ボタンがあるフォームがあります。の送信ボタンをクリックする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

4 に答える 4

7

このページを表示します。

ASP.NET MVC – 同じフォーム内の複数のボタン - David Findley のブログ

ActionMethodSelectorAttribute 継承クラスを作成します。

于 2010-03-11T15:22:31.130 に答える
5

代わりにこれを試してください:

<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
    }
}
于 2010-03-11T07:14:54.347 に答える
1

非表示の 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");
}
于 2013-05-17T19:35:28.530 に答える
-2

回避策:送信ボタンの代わりにjavascriptを使用してフォームを送信します

于 2010-03-11T06:51:07.250 に答える