タイプミスで申し訳ありません。投稿と取得がない場合に 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
以下のリンクで私の解決策をご覧ください。