Web アプリケーションに領域があります。このエリアにはいくつかのコントローラーがあります。領域へのエントリを処理する 1 つのコントローラーがあります (つまり、すべてがこのコントローラーを通過して、領域内の他のコントローラーにアクセスします)。このコントローラーでは、ID をアクションに渡す必要があります。
public ActionResult Index(Guid appID)
{
var vm = new DeviceManagementViewModel
{
SelectedApp = appID,
App = _repository.AUTs.FirstOrDefault(x => x.ID.Equals(appID)),
Devices = GetDevices()
};
return View(vm);
}
作成されたビューは、別の ID でポストバックされます。これで、取得された 2 つの ID がエリア全体に保持されます。
各コントローラーの各作成、編集、および詳細アクションでは、正しいデータを表示できるように、これら 2 つの ID を渡す必要があります。次に例を示します。
public ActionResult Create(Guid appID, Guid deviceID)
{
var vm = new InputViewModel
{
Device = deviceID,
Application = appID
};
return View(vm);
}
各 Detail および Create アクションへのクイックリンクがあり、関連する ID が記入されたサイドバーがあれば素晴らしいと思います。
@Html.ActionLink("Create Input Methods", "Create", "Input", new { appID = <-- ID ONE -->, deviceID = <-- ID TWO --> }, null)
また、このサイドバーを領域全体に保持するとさらに効果的で、各コントローラーをすばやく切り替えることができます。私はこのブログを読んだことがありますが、それがどのように機能するのか疑問に思っています。実際にもっと簡単な方法があれば。
簡単に要約すると、この特定の領域に入ったときに動的に更新できるサイドバーが必要です (1 つのポイントからしか入ることができません)。また、その領域のすべてのビューで持続します。
ありがとう、
- - - 編集 - - - -
わかりました、これを少し進めるのを手伝ってください。これらの 2 つの ID パラメーターを次の場所に渡すアクションがあることを期待しています。
public ActionResult Menu(Guid appID, Guid deviceID)
{
var vm = MenuViewModel
{
DeviceID = deviceID,
ApplicationID = appID
};
return PartialView(vm);
}
これには、次のような ViewModel があります。
public class MenuViewModel
{
public Guid ApplicationID {get; set;}
public Guid DeviceID {get; set;}
}
部分的なビューは次のようになります。
<aside id="dashboard_menu">
<div id="extras">
<div class="oi">
<h2 class="screenreader-only">Menu</h2>
<div class="rollup section">
<h3 class="rollup-trigger">Input Methods</h3>
<p>View or Add more Input Methods</p>
<p class="more"><a href="#">» @Html.ActionLink("View", "Index", "Input", new { appID = Model.ApplicationID, deviceID = Model.DeviceID}, null)</a></p>
<p class="more"><a href="#">» @Html.ActionLink("Add", "Create", "Input", new { appID = Model.ApplicationID, deviceID = Model.DeviceID}, null)</a></p>
</div>
<div class="rollup section">
<h3 class="rollup-trigger">Launch & Exit</h3>
<p>View or Add more Launch & Exit</p>
<p class="more"><a href="#">» @Html.ActionLink("View", "Index", "Launch", new { appID = Model.ApplicationID, deviceID = Model.DeviceID}, null)</a></p>
<p class="more"><a href="#">» @Html.ActionLink("Add", "Create", "Launch", new { appID = Model.ApplicationID, deviceID = Model.DeviceID}, null)</a></p>
</div>
<div class="rollup section">
<h3 class="rollup-trigger">Performance</h3>
<p>View or Add more Performance</p>
<p class="more"><a href="#">» @Html.ActionLink("View", "Index", "Performance", new { appID = Model.ApplicationID, deviceID = Model.DeviceID}, null)</a></p>
<p class="more"><a href="#">» @Html.ActionLink("Add", "Create", "Performance", new { appID = Model.ApplicationID, deviceID = Model.DeviceID}, null)</a></p>
</div>
<div class="rollup section">
<h3 class="rollup-trigger">Power Consumption</h3>
<p>View or Add more Power Consumption</p>
<p class="more"><a href="#">» @Html.ActionLink("View", "Index", "Power", new { appID = Model.ApplicationID, deviceID = Model.DeviceID}, null)</a></p>
<p class="more"><a href="#">» @Html.ActionLink("Add", "Create", "Power", new { appID = Model.ApplicationID, deviceID = Model.DeviceID}, null)</a></p>
</div>
<div class="rollup section">
<h3 class="rollup-trigger">Qualitative Validation</h3>
<p>View or Add more Qualitative Validation</p>
<p class="more"><a href="#">» @Html.ActionLink("View", "Index", "Qual", new { appID = Model.ApplicationID, deviceID = Model.DeviceID}, null)</a></p>
<p class="more"><a href="#">» @Html.ActionLink("Add", "Create", "Qual", new { appID = Model.ApplicationID, deviceID = Model.DeviceID}, null)</a></p>
</div>
</div>
</div>
では、これを永続化するにはどうすればよいでしょうか? 領域の _Layout.cshtml で使用しますか? もしそうならどのように?
もしそうなら、私はそれをすべてのビューページで使用しますか?
私が混乱しているのは、これらの ID パラメータを部分ビューに渡す方法と、部分ビューがどこから読み込まれるかだけですか?