私はWebアプリ開発に非常に慣れていないので、最近の技術から始めようと思ったので、MVCフレームワークだけでなくasp.netも同時に学習しようとしています。これはおそらく、MVCの専門家にとって非常に簡単な質問です。
私の質問は、部分ビューにアクションが関連付けられている必要があり、もしそうであれば、通常のページが部分ビューでRenderPartial()
を使用するたびにこのアクションが呼び出されますか?
部分ビューを返すアクションを使用できますが、部分ビューをレンダリングするためのアクションは必要ありません。 RenderPartialは部分ビューを取得し、指定されたモデルとビューデータ(指定されている場合)を使用して、現在の(親)ビューにレンダリングします。
AJAXを使用してページの一部をロード/リロードする場合、部分的なビューを返すアクションが必要になる場合があります。この場合、ページのそのセクションに対応する部分ビューのみを返すアクションを設定できます。
標準メカニズム
通常のビュー内で部分ビューを使用する(アクションは不要)
...some html...
<% Html.RenderPartial( "Partial", Model.PartialModel ); %>
...more html..
Ajaxメカニズム
AJAXを使用してページの一部を再読み込みします(部分的なページは最初のページの読み込みでインラインでレンダリングされます)
...some html...
<div id="partial">
<% Html.RenderPartial( "Partial", Model.PartialModel ); %>
</div>
...more html...
<script type="text/javascript">
$(function() {
$('#someButton').click( function() {
$.ajax({
url: '/controller/action',
data: ...some data for action...,
dataType: 'html',
success: function(data) {
$('#partial').html(data);
},
...
});
});
});
</script>
AJAXのコントローラー
public ActionResult Action(...)
{
var model = ...
...
if (Request.IsAjaxRequest())
{
return PartialView( "Partial", model.PartialModel );
}
else
{
return View( model );
}
}
受け入れられた答えは完全に正しいですが、jQueryロードを使用して部分ビューをロードできることを付け加えます。並行性を考慮したくない場合は、必要な構成が少なくなります。
$("#Your-Container").load("/controller/action/id");
答えはノーです。ただし、部分ビューの背後でコントローラーアクションが必要になる場合があります。次に、部分ビューを返すactionMethodを作成できます。このactionMethodは、別のビュー内で呼び出すことができます。
@Html.Action("StockWarningsPartial", "Stores")
Actionmethodは次のようになります。
public ActionResult StockWarningsPartial()
{
....
return View("StockWarningsPartial", warnings);
}
ビュー「StockWarningsPartial.cshtml」は次で始まる:
@{
Layout = null;
}
周囲のレイアウトを再度レンダリングしないようにします。
このロジックで似たようなことを達成することができました。
.cshtml内
@Html.Action("ActionMethodName", "ControllerName");
コントローラー内
[Route("some-action")]
public ActionResult ActionMethodName()
{
var someModel = new SomeModel();
...
return PartialView("SomeView.cshtml", someModel);
}
以上です。
.cshtmlからアクションメソッドに値を渡す必要がある場合は可能です。