部分ビューを動的にロードするにはどうすればよいですか?
つまり、私はこのビューを持っているということです。たとえばListProducts
、製品などを含むドロップダウンリストをいくつか選択し、それらから選択した値を使用して、部分的なビューを埋めます。これは、非表示のdivにありますが、onchange()
イベント後に表示され、特定の選択されたアイテムからのデータを使用します。
部分ビューを動的にロードするにはどうすればよいですか?
つまり、私はこのビューを持っているということです。たとえばListProducts
、製品などを含むドロップダウンリストをいくつか選択し、それらから選択した値を使用して、部分的なビューを埋めます。これは、非表示のdivにありますが、onchange()
イベント後に表示され、特定の選択されたアイテムからのデータを使用します。
部分的なビューを返すコントローラーアクションでjQueryの$.load()を使用します。
例えば:
<script type="text/javascript">
$(document).ready(function()
{
$("#yourselect").onchange(function()
{
// Home is your controller, Index is your action name
$("#yourdiv").load("@Url.Action("Index","Home")", { 'id' : '123' },
function (response, status, xhr)
{
if (status == "error")
{
alert("An error occurred while loading the results.");
}
});
});
});
</script>
<div id="yourdiv">
</div>
public virtual ActionResult Index(string id)
{
var myModel = GetSomeData();
return Partial(myModel);
}
@model IEnumerable<YourObjects>
@if (Model == null || Model.Count() == 0)
{
<p>No results found</p>
}
else
{
<ul>
@foreach (YourObjects myobject in Model)
{
<li>@myObject.Name</li>
}
</ul>
}
これを行うには、次の手順に従います。コントローラで、部分ビューを返します。
[HttpGet]
public virtual ActionResult LoadPartialViewDynamically()
{
var query = _repository.GetQuery();
return PartialView("_PartialViewName", query);
}
次に、ビューに空のdivがあります
<div id="partialgoeshere"></div>
次に、jQueryを使用して部分ビューをロードします。
function LoadPartialView() {
$.get("@Url.Action(MVC.ControllerName.LoadPartialViewDynamically())", { null }, function (data) {
$("#partialgoeshere").empty();
$("#partialgoeshere").html(data);
});
}
お役に立てれば
ドロップダウンの変更イベントを代わりに使用するだけで、この例のようなことができると思います。これは単純なjQuery呼び出しであり、 jQueryWebサイトで詳細を確認できます。
$("#dropdown").change(function() {
$("#destination").load("/Products/GetProduct", $(this).val(),
function(result) {
// do what you need to do
});
});
最初のパラメーターは、詳細を呼び出すために呼び出す必要のあるビューです。
2番目のパラメーターは選択された値です。
$ .load関数の3番目のパラメーターは、コールバック関数です。この関数では、結果を解析して、必要な処理を実行できます。
複数のselect $(this).val()がある場合は、選択したオプションの配列が表示されます。
Jsonオブジェクトのみを返したい場合は、この例に従うことをお勧めします。
Ajaxを使用してください:)
http://api.jquery.com/jQuery.ajax/
例:
$.post(window.gRootPath + "Customer/PartialView", { Question: questionId})
.done(function (data) {
$('#partialDiv').html(data.responceText);
});
ajaxを使用してアクションを呼び出し、jQueryを使用して表示するページにhtml文字列を挿入することができます。
サーバ側:
部分ビューを文字列に レンダリングサーバー上の部分ビューをhtml文字列にレンダリングします。AJAXを介して部分ビューをASP.NETMVCページに追加する必要がある場合に便利です。
クライアント側:
$('#yourDdl').change(function()
{
$.get('/InsertPartialViewUsingAjax', function (data)
{
$('#container').html(data);
});
});
次の記事では、最小限のJavaScriptでそれを行う方法を説明しています。基本的に、応答オブジェクトにはJSONではなくhtmlを返します。
https://www.simple-talk.com/content/article.aspx?article=2118