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

时间:2012-02-17 18:14:24

标签: c# javascript asp.net webforms

这是这笔交易。使用带有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();
}

5 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

就个人而言,我更喜欢创建一个帮助函数,用于将相关的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。恕我直言这些消息很漂亮。它们不引人注目,用户无需单击按钮即可使其消失,并且在指定的时间后消失。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我同意不使用弹出窗口,所以你总是可以做一些像页面上有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的问题 - 没有什么能阻止你这样做,因为它完全有效。问题是你觉得哪种方法更具可读性?

答案 4 :(得分:0)

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

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

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

')“....&gt;

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

希望它对你有用..

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