2017-06-22 3 views
0

私のコードでは、いくつかの引数を指定してasp-controllerアクションを呼び出そうとしています。このコントローラアクションは、モーダルダイアログとして部分的なビューを表示します。ビューコード:モーダルダイアログ(asp.netコア)を表示するasp-controllerアクションに隠しフィールドを渡します。

<div style="float: right"> 
      <a asp-controller="MyController" asp-action="MyAction" asp-route-projectId="@Model.ProjectId" asp-route-tag="@Model.Tag" data-target="#modal-container" data-toggle="modal">Execute</a> 
     </div> 

私のコントローラのアクションの署名:

public async Task<ActionResult> MyAction(int projectId, string tag) 

は今も隠しフィールドを含めると、私のコントローラへの引数として渡します。

<div style="float: right"> 
      <a asp-controller="MyController" asp-action="MyAction" asp-route-projectId="@Model.ProjectId" asp-route-tag="@Model.Tag" asp-for-MyNewArgument="MyHiddenField" data-target="#modal-container" data-toggle="modal">Execute</a> 
     </div> 

これを行う構文は何ですか。私はこれを解決するために、フォームの上に隠しフィールドを含め、フォームのサブミットを行いました(コントローラの署名にビューモデルを渡します)。残念ながら、モーダルダイアログではなく完全なページとしてモーダルダイアログを表示します。

答えて

0

あなたはBootstrapのモーダルの「リモート」機能に頼っていますが、これは実際は廃止されました。本質的に、現在のところ、Bootstrapは、モーダル起動リンクが別のページへのhrefを持っていることを認識しているため、実際にはそのURLのAJAX要求を実行し、それをモーダルのボディにロードしています。これは自動的に起こっているため、(隠しフィールドの値などを渡すための)制御はありません。前述したように、それ以降のリリースのBootstrapで削除できる非難された機能に頼っています。さらに、ブートストラップはモーダルが初めて表示されたときにリモートコンテンツを一度だけロードします。したがって、事実の後に隠れた入力が変化した場合、それに基づいて新しいコンテンツは検索されません。

長いと短いので、自分でJavaScriptを使ってこれを処理する必要があります。

$('#modal-container').on('show.bs.modal', function (e) { 
    var $modal = $(this); 
    $.get(e.relatedTarget.href, { 
     MyHiddenFieldName: $('#MyHiddenField').val() 
    }, function (html) { 
     $modal.find('.modal-content').html(html); 
    }); 
}); 
関連する問題