返回视图在控制器

时间:2016-07-03 09:19:53

标签: javascript c# asp.net-mvc

这是一个对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#中管理它。

2 个答案:

答案 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,它将跳过显示警报并继续前进以执行您需要的其他操作。

我希望它能让你知道我想说的是什么。