当搜索没有结果时抛出弹出窗口

Throwing a popup when search yields no results

本文关键字:窗口 结果 搜索      更新时间:2023-09-26

交易如下。使用带有C#后端的ASP.NET WebForms创建一个正常运行的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();
}

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

<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的问题,没有什么可以阻止您这样做,因为它是完全有效的。问题是你觉得哪种方法更可读?

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

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

就我个人而言,我更喜欢创建一个助手函数来将相关的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库。IMHO的信息很漂亮。它们不引人注目,用户不需要点击按钮就可以让它们消失,而且它们在您指定的时间后就会消失。

但我同意Mike的观点,如果你没有任何记录,你应该只使用GridView的内置属性(EmptyDataRowStyle和EmptyDataRowText)来显示"没有数据匹配你的查询"风格的消息。假设您使用的是GridView,即..

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

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

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

如果你仍然想继续使用传统的警报,那么很明显,你可以在页面加载时启动它,而不是将脚本附加到它上。

')"….>

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

希望它对你有用。。

注意:我使用自己的DLL来呈现内容,所以上面的编码可能需要修改,因为我确实忘记了传统的asp编码。:)