【问题标题】:Throwing a popup when search yields no results当搜索没有结果时抛出一个弹出窗口
【发布时间】:2023-03-29 03:36:01
【问题描述】:

这是交易。拥有一个使用 ASP.NET WebForms 和 C# 后端的功能正常的 Web 应用程序。这东西工作得很好,但我一直在寻求改进,作为这个东西的初学者。现在,为了处理没有结果的用户搜索,我使用了以下方法,并且想知道是否有更简洁的方法来做,以供将来参考:

DataClass data = new DataClass();
var searchresults = data.GetData(searchBox.Text);
int datanumber = searchresults.Count();
if (datanumber == 0)
{
    ClientScript.RegisterStartupScript(this.GetType(), "alert", "javascript:alert('There were no records found to match your search');", true);
}
else
{
    DropDownList1.Visible = true;
    DropDownList1.Items.Clear();
    DropDownList1.DataSource = searchresults;
    DropDownList1.DataBind();
}

【问题讨论】:

  • 就个人而言,我宁愿页面说没有结果(可能是红色字体,所以它很突出),而不是弹出窗口。
  • 实际上我不喜欢在与用户交谈时使用警报,除非他试图离开我的页面并且我必须确认他的数据将会丢失。大多数时候,我要么显示一个带有好消息的 div,要么显示一个显示未找到结果的动画 div。
  • @JustinSteranko - 例如,您可以使用 jquery 弹出窗口来美化弹出窗口。就个人而言,我觉得弹出窗口很烦人,并同意 Mike Chrstensen 的观点
  • 您的积分都很受欢迎。我会考虑把它放在页面上。
  • 我对这个问题最感兴趣的是,我是否必须声明“datanumber”变量并使用 Count 方法,或者如果该步骤不正确,我可以只使用 IEnumerable searchresults本身。

标签: c# javascript asp.net webforms


【解决方案1】:

我同意不使用弹出窗口,所以你总是可以做一些简单的事情,比如在你的页面上有一个标签对象:

<asp:Label runat="server" id="lblResultMsg" ForeColor="Red" Visible="False" />

然后动态设置文本(或将其作为属性添加到代码中),如果没有找到结果,则将标签设置为在回发时可见:

if (datanumber == 0)
{
    lblResultMsg.Text = "There were no records found to match your search.";
    lblResultMsg.Visible = true;
}
else
{
    lblResultMsg.Text = "";
    lblResultMsg.Visible = false;

    // do your data binding
}

但是有很多方法可以实现这样的目标。关于您关于使用 Enumerable 集合中的 .Count 的问题 - 没有什么能阻止您这样做,因为它完全有效。问题是您觉得哪种方法更具可读性?

【讨论】:

    【解决方案2】:

    如果您包含 jquery ui 对话框 (http://jqueryui.com/demos/dialog/),您可以简单地调用它来创建一个漂亮的对话框:

    $('<div>message</div>').dialog({autoOpen:true,title:'Error'});
    

    【讨论】:

      【解决方案3】:

      我个人更喜欢创建一个辅助函数,用于将相关的javascript插入到页面中,并且只向函数传递参数,这样我就不必每次都担心杂乱的细节。

      类似:

      public static void GrowlMessage(System.Web.UI.Control pageControl, string header = "", string message = "", bool sticky = false, string position = "top-right", string theme = "", bool closer = true, int life = 8)
      {
          string _js = "$.jGrowl('" + HttpContext.Current.Server.HtmlEncode(message) + "', { header:'" + header + "', sticky:" + sticky.ToString().ToLower() + ", position: '" + position + "', theme: '" + theme + "', closer: " + closer.ToString().ToLower() + ", life:" + life * 1000 + "});";
          ScriptManager.RegisterStartupScript(pageControl, pageControl.GetType(),"Growl",_js, true);            
      }
      

      我使用的示例还需要jQuery 和可用的jGrowl 库here。恕我直言,这些消息很漂亮。它们不引人注目,用户无需单击按钮即可使它们消失,并且它们会在您指定的时间后消失。

      但我同意 Mike 的观点,如果您没有任何记录,您应该只使用 GridView 的内置属性(EmptyDataRowStyle 和 EmptyDataRowText)来显示“没有与您的查询匹配的数据”样式消息。假设您完全使用 GridView,那就是..

      【讨论】:

      • 它最终确实会被传递到一个网格视图中,但首先会被传递到一个下拉列表中作为二级过滤器。这是为了使其与最终用户习惯的其他一些 Web 应用程序保持一致
      【解决方案4】:

      在用户反馈方面,Impromptu 是我的朋友。在 Aaron Goldenthal 的网站上有一个很好的即兴 ASP.NET 实现:http://www.aarongoldenthal.com/post/2009/11/11/Using-jQuery-Impromptu-With-ASPNET.aspx

      【讨论】:

        【解决方案5】:

        如果您决定通过警报提醒用户,请继续使用灯箱效果..

        http://www.designyourway.net/blog/resources/30-efficient-jquery-lightbox-plugins/

        如果您仍想继续使用传统警报,那么显然您可以在页面加载时轻松启动它,而不是附加脚本。..

        ')" ....>

        因为如果您需要任何更改,那么您只需要单独更改 javascript,而无需再次构建项目来测试它...

        希望对你有用..

        注意:我使用自己的 DLL 来呈现内容,因此上述编码可能需要更改,因为我确实忘记了传统的 asp 编码.. :)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-27
          • 1970-01-01
          • 2012-12-12
          相关资源
          最近更新 更多