当搜索没有结果时抛出一个弹出窗口
Posted
技术标签:
【中文标题】当搜索没有结果时抛出一个弹出窗口【英文标题】:Throwing a popup when search yields no results 【发布时间】:2012-03-09 03:37:08 【问题描述】:这是交易。拥有一个使用 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本身。 【参考方案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 编码.. :)
【讨论】:
以上是关于当搜索没有结果时抛出一个弹出窗口的主要内容,如果未能解决你的问题,请参考以下文章
Win32::GuiTest 可以检测 Excel 抛出的错误弹出窗口吗?
jquery弹出框,上一个窗口关闭下一个弹出 用jquery应该怎么写?