【问题标题】:Strange results with Razor if statementRazor if 语句的奇怪结果
【发布时间】:2013-10-02 18:12:21
【问题描述】:

我有一个局部视图,在某些情况下会显示不同的按钮。但是,当我更改此 if 语句时,即使我相信这些 if 语句在技术上做同样的事情,我也会得到不同的结果。我该如何解决这个问题,以便 if 语句完全正常工作?如果需要,我也会发布整个视图。请在 cmets 中请求!

基本上,当我切换数据库值以在 0 和 1 之间切换“ButtonStatus”时,我想在 if 语句中切换我想要执行的操作。

我的部分观点:

    @if(ViewBag.ButtonStatus != 0) 
    {
            ....
            //display 1 or 2 buttons
            ....
            ....
    }
    else {
            ....
            // do not display buttons
            ....
    }

目前使用此 if 语句,显示 1 或 2 个按钮可以正常工作 (ButtonStatus = 1)。但是,当 ButtonStatus = 0 时,仍然显示 2 个按钮。意思是,逻辑永远不会进入 if 语句的 else 部分。我什至在 GrabGhCsStatus 函数中设置了一个警报,然后警报消失了 =/

当我将局部视图更改为

我改变的局部视图:

    @if(ViewBag.ButtonStatus == 1) 
    {
            ....
            //display 1 or 2 buttons
            ....
            ....
    }
    else {
            ....
            // do not display buttons
            ....
    }

即使 ButtonStatus = 1,也不会显示任何按钮。我在 if 语句的 else 部分放置了一个警报,然后弹出警报。但是当 ButtonStatus = 1 时,else 部分不应该被调用

控制器:

        public class GhCsStatusController : Controller
        {
            public ActionResult Index()
            {
                ViewBag.CheckIfCsIsRunning = GhCsStatusProvider.GetGhCsStatus()["CheckIfCsIsRunning"];
                ViewBag.CheckIfGhIsRunning = GhCsStatusProvider.GetGhCsStatus()["CheckIfGhIsRunning"];
                ViewBag.CsStatus = GhCsStatusProvider.GetGhCsStatus()["CsStatus"];
                ViewBag.GhStatus = GhCsStatusProvider.GetGhCsStatus()["GhStatus"];
                ViewBag.ButtonStatus = GhCsStatusProvider.GetGhCsStatus()["ButtonStatus"];

                return View();
            }
        }

提供者:

    public static class GhCsStatusProvider
        {
            public static Dictionary<string,int> GetGhCsStatus()
            {
                using (Entities db = new Entities())
                {
                    int ButtonStatus;

                    System.Data.Objects.ObjectParameter CsOut = new System.Data.Objects.ObjectParameter("CsStatus", typeof(int));
                    System.Data.Objects.ObjectParameter GhOut = new System.Data.Objects.ObjectParameter("GhStatus", typeof(int));
                    System.Data.Objects.ObjectParameter CsRunValue = new System.Data.Objects.ObjectParameter("CSRunningValue", typeof(int));
                    System.Data.Objects.ObjectParameter GhRunValue = new System.Data.Objects.ObjectParameter("GHRunningValue", typeof(int));
                    int r = db.proc_GhCsStatus(CsOut, GhOut, CsRunValue, GhRunValue);

                    Dictionary<string, int> Status = new Dictionary<string, int>();

                    Status.Add("CsStatus", (int)CsOut.Value) ;
                    Status.Add("GhStatus", (int)GhOut.Value);
                    Status.Add("CheckIfCsIsRunning", (int)CsRunValue.Value);
                    Status.Add("CheckIfGhIsRunning", (int)GhRunValue.Value);

                    if (Status["CheckIfCsIsRunning"] == 0 && Status["CheckIfGhIsRunning"] == 0)
                    {
                        ButtonStatus = 0;
                        Status.Add("ButtonStatus", ButtonStatus);            // 0 --> do not display
                    }
                    else
                    {
                        if (Status["CheckIfCsIsRunning"] == 1 || Status["CheckIfGhIsRunning"] == 1)
                        {
                            ButtonStatus = 1;
                            Status.Add("ButtonStatus", ButtonStatus);            // 1 --> display
                        }
                    }

                    return Status;
                }
            }
        }

【问题讨论】:

  • 尝试在视图中记录或仅输出ViewBag.ButtonStatus。我猜它没有在您的提供程序中设置,并且该值既不是0 也不是1
  • 我创建了一个以 JSON 格式输出 ButtonStatus 的视图,当我围绕 =[ 切换数据库值时,它会在该视图中在 0 和 1 之间切换
  • 您是否调试过代码并单步执行并检查了所有值?
  • 好吧,我首先检查了 ButtonStatus,因为它决定了 if 语句的位置。我在创建的测试视图中获得的 ButtonStatus 的 JSON 值输出正确,但是当我将其传递给 if 语句视图时,似乎 if 语句无法正常工作哈哈,或者就像你说的既不是 0 也不是 1。

标签: c# javascript jquery asp.net-mvc razor


【解决方案1】:

尝试将 ViewBag.ButtonStatus 转换为 View 中的字符串,以查看它是否捕获它。我不是100%肯定,但试一试。像这样的东西... @if(ViewBag.ButtonStatus.ToString() == "1")

【讨论】:

  • 问题已解决!我忘记了我做了什么来修复它,虽然哈哈抱歉
  • 但我认为你在正确的轨道上。我认为这个问题是由于某种类型问题
猜你喜欢
  • 2022-11-04
  • 1970-01-01
  • 2015-12-22
  • 1970-01-01
  • 2013-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多