2

タイプミスで申し訳ありません。投稿と取得がない場合に 2 つのビュー間でデータを渡す必要がある C# ASP.NET MVC アプリケーションの概念実証に取り組んでいます。1 つのビューがモーダル ダイアログを起動し、それらの間の通信が必要です。JQueryを使用しています。

データ グリッドを含む Charges.cshtml というビューがあります。データグリッドの最初の列には、プロパティに応じて span 要素または link 要素が含まれる場合があります。これにより、料金に単一の説明があるか複数の説明があるかがわかります。ビューは次のようになります。

料金

料金に複数の説明がある場合、ユーザーは対応する説明リンク (この場合は説明 2) をクリックすると、モーダル ダイアログが開き、以下のようなさまざまな説明が表示されます。

複数の説明

このモーダル ダイアログで、ユーザーは 1 つの説明を確認/選択します。ここで、モーダル ダイアログを閉じて、選択した料金の説明を以下のように更新する必要があります。

更新された説明

ここで難しいのは、2 つのビュー間でデータを渡す方法です。コントローラーまたは JavaScript を介してデータを渡しても問題ありません。

json serialize、ViewData、ViewBag、TempData などの LoanCharge コントローラーの LoadLoanChargeDescriptions メソッドに Charges.cshtml から選択した料金を渡すさまざまな方法を試しましたが、役に立ちませんでした。int、string、float などの単純なデータ型を渡すことはできますが、オブジェクト全体を渡すことはできません。CurrentDescription と Descriptions をコントローラーに渡す必要があると感じており、それらから他の部分に移動する必要があります。文字列のリストを渡そうとしましたが、コントローラーでカウントが0になったため、コントローラーでそれらにアクセスする方法がわかりませんでした。複数の説明UIのポップアップを開くことができます(今のところ、Helloテキストを追加しました)

私のコードスニペットについては、以下を参照してください

請求.cshtml

@model ChargeViewModel
@using (Html.FAFBeginForm())
{
    <div>
            <table>
                <tbody>
                <tr >                   
                    //.....                     
                    <td>
                        @if(Model.IsMultipleMatch)
                        {
                            var loanCharge = Model as ChargeViewModel;
                            if (loanCharge.IsMultipleMatch == true)
                            {
                                //string vm = @Newtonsoft.Json.JsonConvert.SerializeObject(loanCharge);                                                                             
                                <span>
                                    <a 
onclick="ShowMatchingDescriptions('@Url.Action("LoadLoanChargeDescriptions", "LoanCharge")','', '920','500')">
                                        @loanCharge.Description
                                    </a>
                                </span>    
                             }                        
                        }
                        else
                        {
                            <span>Model.Description</span>
                        }  

                    </td>
                </tr>                     
                </tbody>    
            </table>
    </div> 
}

public class ChargeViewModel
{
  public string Description {get;set;}
  public bool IsMultipleMatch {get;set;}
  public List<string> Descriptions {get;set;}
}

public class LoanChargeController
{
  public ActionResult LoadLoanChargeDescriptions()
  {
      // get data here and pass/work on
      return View("_PartialMultipleMatchPopup", null);
  }
}

Review.js で

function ShowMatchingDescriptions(popUpURL, windowProperties, w, h) {
    try {                
        var left = (screen.width / 2) - (w / 2);
        var top = (screen.height / 2) - (h / 2);

        var properties = windowProperties + "dialogwidth:" + w + "px;dialogheight:" + h + "px;dialogtop:" + top + "px;dialogleft:" + left + "px;scroll:yes;resizable:no;center:yes;title:Matching Lender’s Fee;";
        $.when(
        window.showModalDialog(popUpURL, window, properties)
        )
        .then(function (result) {
            var childWindow = result;
        });
    }
    catch (err) {
        alert("Error : " + err)
    }
}

更新 1

質問を更新し、詳細を投稿しました。

前もって感謝します。

更新 2

以下のリンクで私の解決策をご覧ください。

親ウィンドウと子ウィンドウ間の MVC パス モデル

4

1 に答える 1