我对在C#应用程序中实现以下功能感到困惑。
我的解决方案是: 隐藏视图的后半部分并等待Query2运行。一旦Query2数据在ViewBag中;取消隐藏并显示后半部分视图。 一旦我离开控制器并显示一半View,我无法回到控制器查看Query2结果。请告知任何解决方案,希望我能够正确地传达我的问题。
添加控制器代码:
public ActionResult Show()
{
bool dataComing = false;
logger.AddLog("Show Mehtod Activated");
if (dbConn1 == true)
{
try
{
logger.AddLog("DB Connection 2 Data Reading Started.");
cmd = DBConnection.CreateCommand();
logger.AddLog("DB Connection 2 CReateCommandCalled.");
cmd.CommandText = myQuery;
logger.AddLog("DB Connection 2 CommandText is set to Query.");
cmd2.CommandText = myQuery2;
DbReader = cmd.ExecuteReader();
DbReader2 = cmd2.ExecuteReader();
dataComing = true;
DbReader.Read();
}
catch (Exception e)
{
dataComing = false;
logger.AddLog("ERROR while intiating DB Connection 1, error is:" + e.ToString());
return View();
}
logger.AddLog("DB Connection 2 Reading Data...");
}
if (dataComing == true)
{
LoggedInAgents = DbReader["loggedinagent"].ToString();
logger.AddLog("DB Connection 2 Data : LoggedInAgents = " + LoggedInAgents);
ViewBag.loggedInAgents = LoggedInAgents;
DbReader.Close();
SecondData = DbReader2["second"].ToString();
logger.AddLog("DB Connection 2 Data : LoggedInAgents = " + SecondData );
ViewBag.second= SecondData;
DbReader2.Close();
logger.AddLog("DB Reader Closing");
cmd.Dispose();
cmd2.Dispose();
DBConnection.Close();
logger.AddLog("DB Connection Closed");
}
else
{
ViewBag.loggedInAgents = "00";
ViewBag.second= "00";
}
logger.AddLog("PAGE Refresh Set to 5 minutes");
logger.AddLog("Before Refresh Time"+ DateTime.Now.ToString("h:mm:ss tt"));
Response.AddHeader("Refresh", "300");
logger.AddLog("PAGE Refresh Called");
logger.AddLog("After Refresh Time" + DateTime.Now.ToString("h:mm:ss tt"));
logger.AddLog("Returning From Show Function");
return View();
}
答案 0 :(得分:1)
执行返回View()时,razor将在您的视图中执行代码(如果有的话,将模型数据传递给它)并将输出呈现给浏览器,这是纯HTML。
如果您想要处理以后的行为,则应使用ajax 来获取第二个查询执行结果。让您的操作方法返回第一个操作方法的数据,并在视图中,您可以在文档就绪事件上对服务器进行ajax调用。当结果返回时,将其附加到DOM。
您可以使用$ .get方法为第二个查询数据进行ajax调用。所以在你看来,添加这个代码
<div id="dataForSecond"></div>
@section scripts
{
<script>
$(function(){
$.get("@Url.Action("GetData","Home")",function(data){
$("#dataForSecond").html(data);
});
});
</script>
}
假设你的HomeController中有一个名为GetData
的动作方法,它执行你的第二个查询并返回数据
public ActionResult GetData()
{
var secondData="ReplaceThisWithValueComingFromYourQuery";
return Json(secondData,JsonRequestBehavior.AllowGet);
}
如果要在特定时间间隔内刷新数据,可以考虑使用setInterval
方法进行ajax调用以获取数据。
以下代码将每5秒更新一次div内容。
$(function(){
var refreshInterval = 5000;
var url="@Url.Action("GetData","Home")";
setInterval(function () {
$("#dataForSecond").load(url);
}, refreshInterval);
});