Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么=ViewData[";]会显示一个字符串,但对同一个字符串求值失败?_C#_Asp.net Mvc_Viewdata - Fatal编程技术网

C# 为什么=ViewData[";]会显示一个字符串,但对同一个字符串求值失败?

C# 为什么=ViewData[";]会显示一个字符串,但对同一个字符串求值失败?,c#,asp.net-mvc,viewdata,C#,Asp.net Mvc,Viewdata,在控制器中,当我到达页面本身时,我输出 插入title标签,我可以看到它上面写着“True”(没有引号,我也用括号检查了空格,没有空格,它只是True) 但是当我这样做的时候 //CHECK IF WE SHOULD SHOW THE PASSWORD HINT OR NOT Setting passwordhints; using (var db = new dbDataContext()) { passwordhints = (from c in db.Settings

在控制器中,当我到达页面本身时,我输出

插入title标签,我可以看到它上面写着“True”(没有引号,我也用括号检查了空格,没有空格,它只是True)

但是当我这样做的时候

//CHECK IF WE SHOULD SHOW THE PASSWORD HINT OR NOT
Setting passwordhints;

using (var db = new dbDataContext())
{
    passwordhints = (from c in db.Settings
            where c.Name == "ShowPasswordHints" && c.ID == _ID
            select c).FirstOrDefault();
}

if (passwordhints != null)
    //NOTE: .Value IS A STRING
    ViewData["ShowPasswordHints"] = passwordhints.Value;
else
    ViewData["ShowPasswordHints"] = "False";

//END PASSWORD HINTS CHECK
查看

if (accountRepository.isLDAPEnabled(_ID))
                ViewData["LDAP"] = "True";
            else
                ViewData["LDAP"] = "False";

展示这个
谢谢大家,这里有一个新方法非常有效

<%if(ViewData["LDAP"] == "True"){ %>
           SHOW THIS
         <%} %>
ViewData[“某物”]=true;
展示这个

由于
ViewData
是一个
IDictionary
ViewData[“showPasswordHits”]
属于
对象类型。默认情况下,
对象
s通过引用进行比较。您需要一个值比较。因此,尝试将其强制转换为
字符串
,这将导致值比较:

ViewData["something"] = true;

<%if(true.Equals(ViewData["something"])){%> SHOW THIS <%}%>
显示这个
更多关于

更新:您输入到
ViewData[“showPasswordHits”]
中的值始终是字符串。然而,由于C#是静态类型的,编译器不知道当你把它取出来时,它是一个字符串——它只知道它将是一个对象,因为
ViewData
是一个
IDictionary
(返回普通对象的字典)。但是,既然您知道得更好,您可以将它转换为您知道它应该是的
字符串。(顺便说一句,出于这个原因和其他原因,我认为ViewData是MVC框架最薄弱的环节之一)

这在
中起作用的原因是
标记调用
ToString()
。由于
ViewData[“showPasswordHits”]
是一个字符串,因此它的结果与您所期望的一样--
ToString()
是字符串本身


最后:为什么不使用布尔值?

也许更好(更安全)的方法是
“True”.Equals(ViewData[“ShowPasswordHits”])
。如果视图数据字典中的对象不是字符串,则无ClassCastException。如果您解释了在第一个案例中引用对象时自动发生这种情况的原因,即标题标记,也会有所帮助。请参阅我的更新,为什么有时会起作用?当我试着说“True”而不是=obj.Value时,它仍然不起作用,但我上面添加的代码起作用了,我对此感到非常困扰:(@shogun更新中的代码只起作用,因为你很幸运:你在两个位置都使用常量字符串
“True”
,所以引用比较起作用(作为常量,它们占用相同的内存位置)。数据库中的一个内存地址不同,因此引用比较失败。但我要再说一遍:为什么不使用布尔值?这种类型非常适合这种计算。@Kevingesner,噢..快照,谢谢!:)
ViewData["something"] = true;

<%if(true.Equals(ViewData["something"])){%> SHOW THIS <%}%>
<%if((string)ViewData["ShowPasswordHints"] == "True") {%> SHOW THIS <%}%>