2016-05-13 7 views
4

これは複数回尋ねられました。しかし、これまでのところ私は実用的な解決策を見いださなかった。MVC 5複数のビューを1つのビューで表示

Iビューで次のコードを持っている:

@using (Html.BeginForm("RoleEdit", "AccountRoles", FormMethod.Post, new { id = "updaterole" })) 
{ 
    <button name="mySubmit" formaction="@Url.Action("SetDefaultRole", "AccountRoles")" value="MakeDefault" class="button small">Make Default</button> 

    ... 


    other code 

    ... 

    <button type="submit" class="button small" value="save" name="save" id="save">@Resources.DashBoardTags.UpdateRoleTag</button> 
} 

コントローラで:

[HttpPost] 
    public ActionResult SetDefaultRole() 
    { 

     return View(); 
    } 

と:

[HttpPost] 
    public ActionResult RoleEdit(List<UserRole> userRole, string mySubmit) 
    { 

     if (mySubmit == "Save Draft") 
     { 
      //save draft code here 
     } 
     else if (mySubmit == "Publish") 
     { 
      //publish code here 
     } 
    } 

コードが実行される:

  1. 最初の送信ボタンをクリックすると、SetDefaultRole関数は無視され、RoleEdit関数が実行されます。

  2. RoleEdit関数の値mySubmitがnullです。

私の方法のエラーを表示してください!!!!

私は提案されたソリューションを見てきた:

ビュー:

コードは次のようになりますように Proposed Solution

このことから私はMultipleButtonと呼ばれる属性の拡張機能を作成し、自分のコードを変更しました

@using (Html.BeginForm("RoleEdit", "AccountRoles", FormMethod.Post, new { id = "updaterole" })) 
{ 
    <button value="SetDefaultRole" name="action:SetDefaultRole" class="button small" formmethod="post">Make Default</button> 

    ... 


    other code 

    ... 

    <button value="RoleEdit" name="mySubmit:RoleEdit" class="button small" formmethod="post">@Resources.DashBoardTags.UpdateRoleTag</button> 
} 

コントローラ

新しい拡張機能の中で
[HttpPost] 
    [MultipleButton(Name= "action", Argument = "SetDefaultRole")] 
    public ActionResult SetDefaultRole() 
    { 

     return View(); 
    } 

    [HttpPost] 
    [MultipleButton(Name = "action", Argument = "RoleEdit")] 
    public ActionResult RoleEdit(List<UserRole> userRole) 
    { 
     return View(); 
    } 

は、上記提案された解決策のリンクに示すMultipleButtonAttributeが、実行され、次のコード行は、常にNULL値を返します。

controllerContext.Controller.ControllerContext.RouteData.Values[Name] = Argument; 

を誰が助けることができます。あなたは以下のようにそこに名前タグからあなたのボタンを識別することができ

+0

あなたは2 @using(Html.BeginForm 2ボタンの提出を作成しないのはなぜ? –

+2

あなたのボタンの両方が同じ名前を持っており、それらに異なる値を与え、その後、送信された値をチェックしてください。 –

+4

私は思います –

答えて

2

、あなたにこのようにチェックするためにあなたの必要性は

if (Request.Form["mySubmit"] != null) 
{ 
//Write your code here 
} 
else if (Request.Form["save"] != null) 
{ 
//Write your code here 
} 

ORてみてコントローラ。

[HttpPost] 
    public ActionResult RoleEdit(List<UserRole> userRole, FormCollection fc) 
    { 

     if (fc["mySubmit"] != null) 
     { 
      //save draft code here 
     } 
     else if (fc["mySubmit"] != null) 
     { 
      //publish code here 
     } 
    } 
+0

これはnull値を返します。if文は実行されません – gilesrpa

+0

あなたのビューはこのようになります。 @using( "RoleEdit"、 "AccountRoles"、FormMethod.Post、new {id = "updaterole"})) { } –

+0

あなたの名前タグには何も書き込まないでください。それは名前= "mySubmit"のようにする必要があります –

関連する問題