8

ビューがあり、「はい」と「いいえ」の2つのボタンがあります。[はい] をクリックすると 1 つのページがリダイレクトされ、[いいえ] をクリックすると別のページにリダイレクトされます。

これが私の見解です。

@using (Html.BeginForm())
 { 
<table  >
 <tr>
    <td >
      Ceremony : 
    </td>
    <td>
       Ceremony at @Model.ceremony_date

    </td>
</tr>

  <tr>
            <td >
              Name :
            </td>
            <td >
               @Model.first_name  @Model.middle_name  @Model.last_name
            </td>
        </tr>
        <tr>
         <td colspan="2" >
            @Html.Partial("_DegreeDetailsByGraduand", @Model.DegreeList)
         </td>
        </tr>

        <tr>
        <td colspan="2" >
        IS information is correct ?
        </tr>
        <tr>
        <td>
         <input type="submit" id="btndegreeconfirmYes" name="btnsearch" class="searchbutton"  value="Yes" />    
         </td>  <td>
          <input type="submit" id="btndegreeconfirmNo" name="btnsearch" class="searchbutton"  value="No" /></td>  
        </tr>
</table>


 }

これは私のコントローラーです

[HttpPost]

        public ActionResult CheckData()
        {

            return RedirectToRoute("detailform");
        }

コントローラーでボタンの値を取得する方法がわかりません。どうすればできますか。

4

5 に答える 5

9

送信ボタンに名前を付けて、送信された値をコントローラー メソッドで調べます。

<% Html.BeginForm("MyAction", "MyController", FormMethod.Post); %>
<input type="submit" name="submitButton" value="Send" />
<input type="submit" name="submitButton" value="Cancel" />
<% Html.EndForm(); %>



public class MyController : Controller {
    public ActionResult MyAction(string submitButton) {
        switch(submitButton) {
            case "Send":
                // delegate sending to another controller action

            case "Cancel":
                // call another action to perform the cancellation

            default:
                // If they've submitted the form without a submitButton, 
                // just return the view again.
                return(View());
        }
    }

}

お役に立てれば:

于 2012-10-11T09:08:34.183 に答える
3

MVC + カミソリエンジンを使用していると思います。

次のようにします。

あなたの 2 つのボタン:

<input type="submit" value="Yes" id="buttonYes"/>
<input type="submit" value="Cancel" id="buttonCancel"/>

あなたのフォーム:

@using (Html.BeginForm("Method", "Controller", FormMethod.Post, new { enctype = "multipart/form-data", id = "CreateReportForm" }))
{ 
…
}

この JavaScript をフォームに追加します。リダイレクトするコントローラーのアクションにアクションを適応させます。

<script type="text/javascript">

    $(document).ready(function () {
        $("#buttonYes").click(function () {
            $('form#CreateReportForm').attr({ action: "Controller/Create" });
        });
        $("#buttonCancel").click(function () {
            $('form#CreateReportForm').attr({ action: " Controller /Cancel" });
        });
    });

</script>
于 2012-10-11T09:07:46.760 に答える
2

このようにしてみてください:

[HttpPost]
public ActionResult CheckData(string btnSearch)
{
    if (btnSearch == "Yes") {
        // The Yes submit button was clicked
    } else if (btnSearch == "No") {
        // The No submit button was clicked
    }
    return RedirectToRoute("detailform");
}

ただし、テキストが変更されてコントローラー アクションが壊れる可能性があるため、通常はボタンのテキストに対してではなく、定義済みの値に対してテストすることをお勧めします。

<button type="submit" name="btnsearch" value="yes">Yeah</button>
<button type="submit" name="btnsearch" value="no">Nope, I don't want to do this</button>

その後:

[HttpPost]
public ActionResult CheckData(string btnSearch)
{
    if (btnSearch == "yes") {
        // The Yes submit button was clicked
    } else if (btnSearch == "no") {
        // The No submit button was clicked
    }
    return RedirectToRoute("detailform");
}

また、クリックされたボタンに基づいて別のコントローラー アクションにディスパッチできる、さらに優れたアプローチもあります。チェックthis articleアウトしてください。

アクションが次のようなフォームを持つことができますAction:

@using (Html.BeginForm("Action", "Post")) 
{
  <input type="submit" name="saveDraft" value="Save Draft" />
  <input type="submit" name="publish" value="Publish" />
}

次に、対応するコントローラーに 2 つのコントローラー アクションがあります。

public class PostController : Controller 
{
    [HttpParamAction]
    [HttpPost]
    public ActionResult SaveDraft(...) 
    {
        // ...
    }

    [HttpParamAction]
    [HttpPost]
    public ActionResult Publish(...) 
    {
        // ...
    }
}

カスタム アクション名セレクターの定義は次のとおりです。

public class HttpParamActionAttribute : ActionNameSelectorAttribute 
{
    public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo) 
    {
        if (actionName.Equals(methodInfo.Name, StringComparison.InvariantCultureIgnoreCase))
        {
            return true;
        }

        if (!actionName.Equals("Action", StringComparison.InvariantCultureIgnoreCase))
        {
            return false;
        }

        var request = controllerContext.RequestContext.HttpContext.Request;
        return request[methodInfo.Name] != null;
    }
}

これで、クリックされた送信ボタンに応じて、適切なコントローラー アクションが呼び出されます。

于 2012-10-11T09:12:52.117 に答える
1

次のように FormValueRequired 属性を使用します。

[HttpPost]
[FormValueRequired("btndegreeconfirmYes")]        
     public ActionResult CheckData()
     {
       Response.Write(submit);                    
       return RedirectToRoute("detailform");
     }

次のようにマークアップを変更する必要があります。

編集: 2 つのネストされたフォームを使用する

    @using (Html.BeginForm())
    {
      @using (Html.BeginForm())
       {
           .
           .
           .       
      <input type="submit" id="btndegreeconfirmYes" name="btndegreeconfirmYes"class="searchbutton" value="Yes" />           
       }
<input type="submit" id="btndegreeconfirmNo" name="btndegreeconfirmNo"    class="searchbutton"  value="No" /></td>
    }

この送信フォームを最初の送信ボタンで実行すると、独自の値のみが送信され、それを FromValueRquired 属性で使用できます。

于 2012-10-11T09:04:19.820 に答える