Интеграция CKEditor в подробный вид в ASP.NET с использованием VB.NET
Я пытаюсь интегрировать CKEditor с подробным представлением. Мой пример кода:
<asp:DetailsView ID="DetailsViewStation" runat="server" Height="50px" AutoGenerateRows="False"
DataKeyNames="StationNo" DataSourceID="StationSqlDataSource" CellPadding="4"
ForeColor="#333333" GridLines="None">
<AlternatingRowStyle BackColor="White" />
<CommandRowStyle BackColor="#FFFFC0" Font-Bold="True" />
<FieldHeaderStyle BackColor="#FFFF99" Font-Bold="True" />
<Fields>
<asp:BoundField DataField="StationNo" HeaderText="Station Number" ReadOnly="True"
SortExpression="StationNo" ApplyFormatInEditMode="True">
<HeaderStyle Width="150px" />
<ItemStyle HorizontalAlign="Center" Width="1200px" />
</asp:BoundField>
<asp:BoundField DataField="Station_Name" HeaderText="Station Name" SortExpression="Station_Name">
<ItemStyle HorizontalAlign="Center" />
</asp:BoundField>
</Fields>
<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
<RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
</asp:DetailsView>
<asp:SqlDataSource ID="StationSqlDataSource" runat="server" ConnectionString="<%$ ConnectionStrings:AgainConnectionString %>"
DeleteCommand="DELETE FROM [StationInfoTable] WHERE [StationNo] = @StationNo"
InsertCommand="INSERT INTO [StationInfoTable] ([StationNo], [Station_Name] VALUES (@StationNo, @Station_Name)"
SelectCommand="SELECT * FROM [StationInfoTable] WHERE ([StationNo] = @StationNo)"
UpdateCommand="UPDATE [StationInfoTable] SET [Station_Name] = @Station_Name, [Importatnat_Info] = @Importatnat_Info WHERE [StationNo] = @StationNo">
<DeleteParameters>
<asp:Parameter Name="StationNo" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="StationNo" Type="Int32" />
<asp:Parameter Name="Station_Name" Type="String" />
</InsertParameters>
<SelectParameters>
<asp:ControlParameter ControlID="ListBoxChoices" Name="StationNo" PropertyName="SelectedValue"
Type="Int32" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="Station_Name" Type="String" />
<asp:Parameter Name="StationNo" Type="Int32" />
</UpdateParameters>
</asp:SqlDataSource>
Я хочу редактировать данные в детальном представлении с помощью CKEditor, чтобы вставлять и удалять ссылки на базу данных и из нее. Кто-нибудь делал это раньше?
3 ответа
Я не DetailsView
эксперт, но я думаю, что следующее общее резюме охватывает то, что вам нужно будет сделать.
Использовать TemplateField
а не BoundField
для Station_Name. Это будет выглядеть так:
<asp:TemplateField HeaderText="Station Name">
<ItemTemplate>
<asp:Label ID="lblStationName" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Station_Name") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<CKEditor:CKEditorControl ID="CKEditor1" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Station_Name") %>' />
</EditItemTemplate>
</asp:TemplateField>
Это то, что выглядит как хорошая ссылка на обновление базы данных из DetailsView
, Где ваша ситуация отличается от его в том, что вы используете CKEditor
, Но вы можете получить информацию из CKEditor
контролировать так же, как он делает, когда он готов к обновлению:
Dim htmlText as String = Nothing
Dim ctl as CKEditor = CType(DetailsViewStation.FindControl("CKEditor1"), CKEditor)
If ctl Is Nothing Then
htmlText = ctl.Text
End If
Если окажется, что вы не можете связать со свойством Text CKEditor
контроль, вы бы присвоить значение CKEditor
,Text
контролировать так же, как вы получаете его: делая DetailsViewStation.FindControl("CKEditor1")
чтобы получить элемент управления, и присвоение HTML, который вы получили из базы данных, для элемента управления Text
имущество.
Надеюсь, это поможет.
Основываясь на ваших комментариях, вы никогда не получите значение из текстового поля / CKEditor.
Ваша привязка доступна только для чтения из-за DataBinder.Eval
,
Пытаться
<asp:TemplateField HeaderText="Station Name">
<ItemTemplate>
<asp:Label ID="lblStation_Name" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Station_Name") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<CKEditor:CKEditorControl ID="CKEditor1" runat="server" Text='<%# Bind("Station_Name") %>' />
</EditItemTemplate>
</asp:TemplateField>
или же
<asp:TemplateField HeaderText="Station Name">
<ItemTemplate>
<asp:Label ID="lblStation_Name" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Station_Name") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<CKEditor:CKEditorControl ID="CKEditor1" runat="server" Text='<%# DataBinder.Bind(Container, "DataItem.Station_Name") %>' />
</EditItemTemplate>
</asp:TemplateField>
Изменить: на основе вашего комментария: как вы сгенерировали SQLDataSource? Лучше всего использовать дизайнер. Я думаю, вы пытались сгенерировать код самостоятельно. Я вижу несколько ошибок:
В UpdateParameters вы используете ControlParameters, но вы получили значения все неправильно. Значения, которые вы присвоили ControlCID, должны быть присвоены PropertyName. Затем присвойте ControlID имя соответствующего CKEditor.
Как это:
<asp:ControlParameter ControlID="CKEditor12" PropertyName="Footer_notes" Type="String" />
Следующий код приведен после интегрированного CKEditor с DetailsView, и я поставил здесь ответ, чтобы другие могли его прочесть и извлечь из него пользу. Все то же самое, за исключением поля Notes, в котором я хотел использовать CKEditor, чтобы иметь возможность вставлять гиперссылки в базу данных.
<asp:TemplateField HeaderText="Notes">
<ItemTemplate>
<asp:Label ID="lblStationNotes" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Notes") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<CKEditor:CKEditorControl ID="CKEditor11" runat="server" Text='<%# Bind("Notes") %>' />
</EditItemTemplate>
</asp:TemplateField>