データがロードされた後に部分ビューをレンダリングするスクリプトがありますが、同じデータを使用して少なくとも1つの部分ビューをロードする必要があります。これは長時間実行するクエリ(30秒〜1分)なので、部分ビューごとにロードする必要はありません。あるいは間違った道を行くのですか?私はまだASP.Netにはまだまだ新しく、Javascript/Jqueryについては非常に新しくなっているので、ベストプラクティスを完全に認識していないので、「コンベンションに反対」のものを見つけたら、あまりにも。データがロードされた後に部分ビュー(または複数)がロードされる
編集:それは私に最終的に何をしようとしていることに注意する必要があります。私の現在の非ASPアプリケーション(C#/ XAML)では、アプリケーションがロードされてから15分ごとにリフレッシュするときに、(LoadMonitorDataメソッドに相当する)データをロードします。または、リフレッシュはリフレッシュボタンでトリガーできます。
これまで私がこれまで持っていたことは...どんな助けや指導も大歓迎です。
Index.cshtml
@{
ViewBag.Title = "MMCView";
}
@section scripts {
<script type="text/javascript">
$(document).on('click', '[name^=project]', function() {
if ($(this).hasClass('selected')) {
$('.mig-project').removeClass('selected').removeClass('low-opacity').addClass('full-opacity');
$('#data-area').removeClass('show-data-view');
}
else {
$(this).addClass("selected").addClass('full-opacity').removeClass('low-opacity');
$('.mig-project').not(this).removeClass("full-opacity").removeClass('selected').addClass("low-opacity");
$('#data-area').load($(this).data("url"));
$('#data-area').addClass('show-data-view');
}
})
</script>
<script type="text/javascript">
$(document).ready(function(e) {
$("#list-container").each(function(index, item) {
var url = $(item).data("url");
if (url && url.length > 0) {
$(item).load(url);
}
})
})
</script>
}
<div class="project-list slow-load" id="list-container" data-url="/mmc/projectpanes">
<img src="loading.gif" />
</div>
<div class="hide-data-view slow-load" id="data-area" data-url="/mmc/projectdata"></div>
MMCController.csこの状況で
using MMC_ASP.Models;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc;
using System.Web.Script.Serialization;
namespace MMC_ASP.Controllers
{
public class MMCController : AsyncController
{
MonitorData downloadedInfo = new MonitorData();
//GET: MMC
public ActionResult Index()
{
return View();
}
public ActionResult ProjectPanes()
{
downloadedInfo = LoadMonitorData();
return PartialView("_ProjectPanes", downloadedInfo.MainPanel.OrderBy(o => o.Client).ToList());
}
public ActionResult ProjectData(string server)
{
return PartialView("_ProjectData", downloadedInfo.Information.Where(x => x.ServerName == server).ToList());
}
public ActionResult MainWindowMonitor()
{
return PartialView("_MainWindowMonitor", downloadedInfo.MonitorText);
}
public MonitorData LoadMonitorData()
{
MonitorData deserializedData = null;
using (WebClient wc = new WebClient())
{
wc.Encoding = Encoding.Unicode;
string location = "http://MYWEBAPI-RETURNS-JSON";
string data = wc.DownloadString(new System.Uri(location));
var deserializer = new JavaScriptSerializer();
deserializedData = deserializer.Deserialize<MonitorData>(data);
}
return deserializedData;
}
}
}
データ結果は同じであり、各アクションは、単にそれをフィルタリングするので、なぜすべてのパーシャルをロードしないと、単にそれらを非表示にしたり、崩壊?そうでない場合は、一定期間データをキャッシュする* http:// MYWEBAPI-RETURNS-JSON *の前にAPIレイヤーを追加することができます。代わりにそのAPIを呼び出すと、それは新鮮さを管理させます。 –
「すべての部分を読み込んで単純に非表示にする」と言うと、私はあなたに従わないと思います。それは私を得ているローディング部分です...隠れている/崩壊私はかなりCSS/JSをダウンしている。私が問題を抱えている 'downloadedInfo'変数にデータを渡しています。キャッシングのアイデアは非常に良いものです...私はある時点でそれを実装することを検討するかもしれません。私は私のポストに明確化のポイントを追加します。 –
おそらく私も混乱しています。あなたはAPIからデータを取得できますか、それとも問題ですか? –