如果声明似乎不适用于stringbuilder(WebMethod)

时间:2015-01-15 09:12:30

标签: c# asp.net stringbuilder webmethod

我有以下返回条件字符串的WebMethod。不幸的是,if语句似乎不起作用。我知道WebMethod正在工作,因为我得到了Bla bla bla字符串,但没有if语句中的图标。我做错了什么?

[WebMethod]
public static string photos()
{
    StringBuilder photos_sb = new StringBuilder();
    photos_sb.AppendFormat("Bla bla bla bla...");
    db = Database.Open("DefaultConnection"); 
    var HasPhoto = db.Query("SELECT [IDphoto] FROM [photos]");
    if (HasPhoto != null)
    {
        photos_sb.AppendFormat("<img src=\"icon-Green.png\" />");
    }
    else
    {
        photos_sb.AppendFormat("<img src=\"icon-Gray.png\" />");
    }
    db.Close();
    db.Dispose();
    photos_sb.AppendFormat("Bla2 bla2 bla2 bla2...");

    return photos_sb.ToString();
}

2 个答案:

答案 0 :(得分:2)

您的img标记缺少结束>。这意味着它们很可能正在被输出,但它们不会以您期望的格式出现,从而呈现您所期望的。给出的代码将返回如下内容:

Bla bla bla bla...<img src="icon-Gray.png"Bla2 bla2 bla2 bla2...

我希望浏览器能够对此感到非常困惑。

如果这实际上是一个拼写错误而你输出的字符串真的只是“Bla bla bla bla ...”那么你唯一的可能就是你运行了错误的代码版本。如果编译了上述内容,则无法通过if语句并至少运行其中一个分支而返回您的值。

我建议三件事:

  1. 确保您运行的是正确的已编译代码。
  2. 贯穿它 使用调试器来跟踪其实际执行情况。
  3. 确切地确认输出字符串来自此方法的内容,而不是您在使用此方法的任何内容中看到的几行代码。

答案 1 :(得分:0)

我认为答案已经提供,所以这只是一些有用的建议。节省麻烦并减少重复代码:

photos_sb.Append("Bla bla bla bla...");
[....]
photos_sb.Append("<img src=\"");
if (HasPhoto != null)
{
    photos_sb.Append("icon-Green.png");
}
else
{
    photos_sb.Append("icon-Gray.png");
}
photos_sb.Append("\"" />");

这样你的条件只会改变实际变化的一位代码。

使用AppendFormat稍微清洁的方式就是这样......

photos_sb.AppendFormat("Bla bla bla bla...");
[....]

string photo = "icon-Gray.png";
if (HasPhoto != null)
{
    photo = "icon-Green.png";
}
photos_sb.AppendFormat("<img src=\"{0}\" />", photo);