Met*_*uru 5 c# asp.net-mvc viewdata
//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
Run Code Online (Sandbox Code Playgroud)
是在控制器中,当我到达页面本身时我输出
<%=ViewData["ShowPasswordHints"]%> 进入标题标签,我可以在那里看到它说"真"(没有引号,我还用括号括起来检查空格,没有空格,它实际上只是真)
但是,当我这样做
<%if(ViewData["ShowPasswordHints"] == "True") {%> SHOW THIS <%}%>
Run Code Online (Sandbox Code Playgroud)
显示这从未出现过,到底是什么?
更新:但是,如果ViewData设置如此......它工作......嗯?
if (accountRepository.isLDAPEnabled(_ID))
ViewData["LDAP"] = "True";
else
ViewData["LDAP"] = "False";
Run Code Online (Sandbox Code Playgroud)
视图...
<%if(ViewData["LDAP"] == "True"){ %>
SHOW THIS
<%} %>
Run Code Online (Sandbox Code Playgroud)
感谢每个人,这里是工作伟大的新方法
ViewData["something"] = true;
<%if(true.Equals(ViewData["something"])){%> SHOW THIS <%}%>
Run Code Online (Sandbox Code Playgroud)
因为ViewData是IDictionary<string, object>,ViewData["ShowPasswordHints"]是类型object.默认情况下,objects通过引用进行比较.你想要一个价值比较.因此,尝试将其转换为a string,这将导致值比较:
<%if((string)ViewData["ShowPasswordHints"] == "True") {%> SHOW THIS <%}%>
Run Code Online (Sandbox Code Playgroud)
更多在msdn.
更新:您输入的值ViewData["ShowPasswordHints"]始终是一个字符串.但是,由于C#是静态类型的,编译器不知道当你取回它时,它是一个字符串 - 它只知道它将是一个对象,因为它ViewData是一个IDictionary<string, object>(返回普通对象的字典).但既然你知道的更好,你可以把它投射到string你应该知道的那个.(顺便说一句,我认为ViewData是MVC框架中最薄弱的一点,因此和其他人一样)
为什么这样做<title>是因为<%= %>标签会调用ToString()它们中的任何内容.因为它ViewData["ShowPasswordHints"]是一个字符串,它会像你期望的那样出现 - ToString()字符串就是字符串本身.
最后:你为什么不使用布尔值?