3

フォームに 2 つの送信ボタンを配置しようとしています。1 つは会議を受け入れます。もう一方はそれらを拒否します。両者は異なる振る舞いをします。私の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>

簡単ですが、インターネットやドキュメントでこれに関するテストを見つけることができません。私がこれのために何を持っているか知っている人はいますか?

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

次に、ミーティング コントローラーの Accept アクションと Decline アクションにそれぞれ Accept コードと 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

考えられる解決策の1つ-タイプの2つのボタンを使用します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 に答える
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 に答える