我有一个下拉列表和一个列表框两个asp.net控件
我试图阻止用户将重复项添加到列表框控件
我能阻止它,但我想显示DIV或警告框说“不允许重复名称”
protected void btn_AddRecipientAction_OnClick(object sender, EventArgs e)
{
if (Convert.ToInt32(this.ddlRecipient.SelectedValue) > 0)
{
if (ddlRecipient.Text.Length > 0)
{
//var items = new System.Collections.ArrayList(this.lstRecipient.Items);
for(var i = lstRecipient.Items.Count - 1; i >= 0; --i)
{
if (lstRecipient.Items[i].Text == ddlRecipient.SelectedItem.Text)
{
lstRecipient.Items.RemoveAt(i);
**//alert("duplicate entry not allowed")
//div display the message and disappears after few seconds?**
}
}
ListItem newList = new ListItem();
newList.Text = ddlRecipient.SelectedItem.Text;
newList.Value = ddlRecipient.SelectedValue;
this.lstRecipient.Items.Add(newList);
}
}
}
答案 0 :(得分:2)
你想要的实际上是两件事。
您应该在后面的代码中验证,检查帖子上的重复项。然后,使用一些javascript在客户端上进行相同的检查。
您必须检查服务器上的重复项,因为用户可能没有打开javascript。
答案 1 :(得分:2)
提醒方式:
假设您有一个ScriptManager
,您可以使用此行ScriptManager.RegisterClientScriptBlock(this,this.GetType(),"alert","alert('duplicate entry not allowed');",true);
然而,这仍然会进行回发,因为在单击后再次加载页面时会运行脚本。更好的解决方案是在提交页面之前使用javascript在客户端验证。
答案 2 :(得分:2)
哇!请不要在页面中注入js来提醒用户。您应该使用通知控件来接收类似于数组的消息数据集,然后将消息显示给用户。你想分开你的顾虑。
你可以用js来实现。在服务器上,您可以在json中的隐藏字段中设置数组,然后在js中的文档就绪事件中读取该json数据,解析它并在数组上循环并显示消息。如果你必须你可以使用警报显示它们,但你应该避免它,因为它是1990年代。
但我会超越它。我在javascript进入服务器之前进行了所有的处理和验证。因此,您不必依赖帖子来执行验证。因此,一旦用户添加该项目,就会被告知它是重复的。然后,一旦用户填写了列表,他就可以使用ajax调用保存或发布页面,并在服务器上解析列表,验证并保存。如果您必须将列表与已在服务器上保留的列表进行比较,则可以在那里执行此操作。什么事情出错了?您将消息添加到通知控件。
请考虑一下。尝试使用像MVC这样的框架来区分您的关注点。我使开孔更快,更易于维护。
答案 3 :(得分:0)
要从后面的代码中调用一些JS,可以使用Page.ClientScript
属性并调用RegisterStartupScript()
方法