Сообщение об ошибке, когда модал пуст - PullRequest
0 голосов
/ 22 сентября 2011

У меня есть несколько модальных всплывающих окон на моей странице, которые содержат флажки.Флажки - это разные элементы, которые можно добавить к конкретному продукту.Некоторым продуктам, однако, назначены все элементы одного типа.Мне нужен способ показать сообщение в модальном режиме, когда модальное пусто.

Я попытался использовать метку внутри модального окна, которая гласит: «Все функции в настоящее время связаны с этим продуктом».Но ярлык оставляет место в модале, когда его видимость скрыта, и это раздражает, поэтому я отказался от этой идеи.

Какой хороший способ иметь скрытое сообщение, которое появляется, когда модал пуст?

<asp:LinkButton ID="FeatureButton" runat="server">Feature</asp:LinkButton>
  <asp:Panel ID="FeaturePanel" runat="server" CssClass="modalPopup"
  Style="display:none">
     <div class="PopupHeader">Add a Feature</div>
       <asp:CheckBoxList ID="cbxAddFeature" runat="server" 
       DataSourceID="dsNewFeatures" DataTextField="FeatureTitle"
       DataValueField="FeatureID"></asp:CheckBoxList>
       **<asp:Label ID="FeatureError" runat="server" 
       Text="All features are currently associated to this product." 
       Display="none"></asp:Label>**
         <asp:Button ID="SubmitFeatures" runat="server" Text="Submit" />
         <asp:Button ID="CancelSubmitFeatures" runat="server" Text="Cancel" />
   </asp:Panel>
<asp:ModalPopupExtender ID="FeatureModal" runat="server" 
BackgroundCssClass="modalBackground" CancelControlID="CancelSubmitFeatures"
DropShadow="True" DynamicServicePath="" Enabled="True" 
PopupControlID="FeaturePanel" TargetControlID="FeatureButton">
</asp:ModalPopupExtender>   


Protected Sub SubmitFeatures_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Handles SubmitFeatures.Click
FeatureModal.Hide()
For Each feature As ListItem In cbxAddFeature.Items
**FeatureError.Visible = False**
If feature.Selected Then
'SQL INSERT: Marketing Table
Dim strSQL As String = "INSERT INTO Marketing (ProductID, MarketingTypeID, MarketingTitle, MarketingData) VALUES (@ProductID, 3, 'Feature', @MarketingData)"

Using cn As New   SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("LocalSqlServer").ConnectionString)

Using cmd As New SqlCommand(strSQL, cn)

cmd.Parameters.Add(New SqlParameter("@ProductID", ProductID.Value))
cmd.Parameters.Add(New SqlParameter("@MarketingData", feature.Value))

cn.Open()

cmd.ExecuteNonQuery()
End Using
End Using
End If
**If (dsNewFeatures) == DBNull.Value Then
  FeatureError.Visible = True
End If**
 Next
 Response.Redirect(Request.RawUrl)
End Sub

<asp:SqlDataSource ID="dsNewFeatures" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ProductsConnectionString %>" 
    ProviderName="<%$ ConnectionStrings:ProductsConnectionString.ProviderName %>" 
    SelectCommand="SELECT DISTINCT f.FeatureID, f.FeatureTitle 
    FROM Feature f LEFT JOIN Category c ON c.CategoryID = f.CategoryID 
    WHERE f.CategoryID IN 
    (SELECT CategoryID FROM CategoryLink 
    WHERE ProductID = @ProductID) AND f.FeatureID NOT IN 
    (SELECT m.MarketingData FROM Marketing m 
    WHERE m.MarketingTypeID = 3 AND m.ProductID = @ProductID) 
    ORDER BY f.FeatureTitle">
    <SelectParameters>
        <asp:QueryStringParameter Name="ProductID" QueryStringField="id" />
    </SelectParameters>
    <SelectParameters>
        <asp:QueryStringParameter Name="CategoryID" QueryStringField="id" />
    </SelectParameters>
</asp:SqlDataSource>

Все **** элементы являются частями метки, If, EndЕсли оператор не работает, кто-нибудь знает, как я могу изменить его, чтобы найти пустой модал для сообщения об ошибке?

enter image description here

Вот как это выглядит сейчасОбратите внимание на ярлык с надписью.Я не знаю, почему это не пройдет!enter image description here

РЕДАКТИРОВАТЬ 9/29/11

Protected Sub dsNewFeatures_Selected(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.SqlDataSourceStatusEventArgs) Handles dsNewFeatures.Selected
    If FeatureError.Text = String.Format("rows count: {0}", e.AffectedRows) Then
        FeatureError.Visible = True
    Else
        FeatureError.Visible = False
    End If
End Sub

Это почти работает!Метка не видна только из-за этого кода, но я не могу отобразить ее, когда очищаю модальный

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

Когда вы говорите it's visibility is set to hidden, вы ссылаетесь на свойство видимости CSS? Если это так, попробуйте использовать display:none вместо этого, и это должно исправить проблему с пробелами, которая вам не нравится.

Если это не сработает (думаю, так и будет), просто установите для свойства Visible метки значение false в коде, когда вы запускаете событие, которое появляется в диалоговом окне. Я считаю, что ASP.NET не отображает элементы, когда свойство Visible имеет значение false, поэтому это определенно должно работать.

Что я имею в виду, это:

annoyingLabel.Visisble=False

Вы можете переключать свойство Visible соответственно в зависимости от того, нужно ли отображать сообщение или нет.

Надеюсь, это поможет.

ОБНОВЛЕНИЕ:

How about this?

Dim showNextTime As Boolean = False
If feature.Selected Then
  '' your code here
Else 
   showNextTime =True 
End If

FeatureError.Visible = showNextTime

Поскольку вы перебираете все элементы и проверяете, выбраны ли они или нет, все, что вам нужно сделать, - установить флаг, который станет истинным, как только один из элементов не будет выбран (то есть будет хотя бы один элемент). осталось добавить).

Если нет элементов для просмотра, то по умолчанию FeatureError.Visible должен иметь значение false.

Это работает для вас?

ОБНОВЛЕНИЕ 2

Dim showNextTime As Boolean = False
If feature.Selected Then
  '' your code here
Else 
   showNextTime =True 
End If
' Add this condition to make it visible if Items.Count==0 
FeatureError.Visible = (showNextTime Or cbxAddFeature.Items.Count==0)

ОБНОВЛЕНИЕ 3 Теперь попробуйте это:

Добавьте событие OnCLick в FeatureButton следующим образом:

<asp:LinkButton OnClick="FeatureButton_Click" ID="FeatureButton" runat="server">Feature</asp:LinkButton>

А на вашем коде Сзади:

  Sub FeatureButton_Click(sender As Object, e As EventArgs) 
     FeatureError.Visible = (cbxAddFeature.Items.Count=0)
  End Sub

Мы сделаем эту работу.

ОБНОВЛЕНИЕ 4: Измените свой OnSelected код на это (я не знаю, почему вы сравнивали текст):

Protected Sub dsNewFeatures_Selected(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.SqlDataSourceStatusEventArgs) Handles dsNewFeatures.Selected
    If  e.AffectedRows=0 Then
        FeatureError.Visible = True
        FeatureError.Text= "All features are currently associated to this product." 
    Else
        FeatureError.Text= "" 
        FeatureError.Visible = False
    End If
End Sub
0 голосов
/ 27 сентября 2011

Вы получаете пробел из-за того, как asp.net контролирует видимость за кулисами.Когда элемент управления отображается в браузере, его стиль CSS устанавливается на visibility: hidden, что оставляет место в документе, где должен быть элемент.Если вы хотите удалить пробел, вы должны использовать стиль css display: none.

Итак, в вашем коде: Измените

<asp:Label ID="FeatureError" runat="server" 
       Text="All features are currently associated to this product." 
       Display="none"></asp:Label>

на

<asp:Label ID="FeatureError" runat="server" 
       Text="All features are currently associated to this product."></asp:Label>

Изменить

For Each feature As ListItem In cbxAddFeature.Items
**FeatureError.Visible = False**
....

На

 For Each feature As ListItem In cbxAddFeature.Items
    FeatureError.Attributes.Add("Style", "Display: None;")
...

Изменить

**If (dsNewFeatures) == DBNull.Value Then
  FeatureError.Visible = True
End If**

На

Dim dv as DataView
dv = CType(dsNewFeatures.Select(DataSourceSelectArguments.Empty), DataView)
If(dv.Count == 0)
  FeatureError.Attributes("Style") = "Display: Inline;"
End If

Вы также можете выполнить рефакторинг стилейесли хотите, таблицу стилей.

Ссылка: Видимость и отображение в CSS

...