这是一个对C#代码中管理JavaScript感兴趣的问题,而不是讨论这是否是一个好的设计。
我开始尝试使用this answer在控制器内创建警报。我理解,在控制器中使用JS并不常见。
如果我在控制器中创建警报,我该如何管理程序流然后返回视图。返回警报时会干扰显示视图的进度。
第一种方式暂停DoSomething中的代码:
public ActionResult DoSomething()
{
// code to get User
if(User.Role == someRole)
{
return Content("<script language='javascript' type='text/javascript'>alert('Merchant on Hold');</script>");
}
// More code
}
public ActionResult Dashboard()
{
// Do things
}
第二种方式暂停仪表板中的代码。
public ActionResult DoSomething()
{
// code to get User
if(User.Role == someRole)
{
return RedirectToAction("Dashboard", "AppUser", new { message = 1 });
}
// More code
}
public ActionResult Dashboard(int? message)
{
if(message == 1)
return Content("<script language='javascript' type='text/javascript'>alert('Merchant on Hold');</script>");
// Do things
}
我无法确定如何使用返回内容显示警报,因为这会阻止控制器内的返回,或者是否有办法在关闭时指示警报。
我正在寻找一种方法来控制警报之后的程序流程,因为它代表了它,它不会渲染视图,并且它返回的视图,不需要参数。
刷新页面将导致警报重新显示。
所以我想知道这是否是一种可行的方式来显示警报,或者是否有办法在C#中管理它。
答案 0 :(得分:1)
我不确定我是否理解你正在寻找的东西,但这是你想要的吗?
public ActionResult DoSomething()
{
HttpCookie cookie = new HttpCookie("ShowAlert");
cookie.Value = "1";
this.ControllerContext.HttpContext.Response.Cookies.Add(cookie);
return RedirectToAction("Dashboard", "Home", new { message = 1 });
}
public ActionResult Dashboard(int? message)
{
if (!this.ControllerContext.HttpContext.Request.Cookies.AllKeys.Contains("ShowAlert"))
{
return View("Index");
}
HttpCookie cookie = this.ControllerContext.HttpContext.Request.Cookies["ShowAlert"];
cookie.Expires = DateTime.Now.AddDays(-1);
this.ControllerContext.HttpContext.Response.Cookies.Add(cookie);
if (message == 1)
return Content("<script language='javascript' type='text/javascript'>alert('Merchant on Hold');</script>");
else
return Content("<script language='javascript' type='text/javascript'>alert('indefiend Message');</script>");
}
}
答案 1 :(得分:1)
如果你真的想让你的程序流动,你可以利用TempData,但是我想到了一些可以在不使用TempData的情况下工作的东西:
public ActionResult Dashboard(int? message)
{
if(message == 1)
return Content(@"<script language='javascript' type='text/javascript'>
alert('Merchant on Hold');
window.location.href='/AppUser/Dashboard?message=2'
</script>
");
// Do things
}
现在,当下次调用该操作时,消息将具有值2,它将跳过显示警报并继续前进以执行您需要的其他操作。
我希望它能让你知道我想说的是什么。