📄 editarticle.ascx.vb
字号:
Imports DNNLite.Entites.Modules
Imports DNNLite.Entites.Tab
Imports DNNLite.Comm
Imports DNNLite.DesktopModules.Article
Imports NHibernate.Expression
Imports Castle.ActiveRecord
Imports System.Collections.Generic
Imports Castle.ActiveRecord.Queries
Partial Class DesktopModules_Article_EditArticle
Inherits PortalModuleBase
#Region "绑定数据"
Private Sub BindTabs()
Dim tabs As IList(Of TabInfo) = TabInfoController.GetTabs(True, False, True)
'////lstTabs.DataValueField = "TabId";
'////lstTabs.DataTextField = "TabName";
'////lstTabs.DataBind();
For i As Int16 = 0 To tabs.Count - 1
Dim itm As New ListItem()
itm.Text = "".PadLeft(tabs(i).Level * 3, ".") + tabs(i).TabName + " " + tabs(i).Title
itm.Value = tabs(i).TabId.ToString()
ddltab.Items.Add(itm)
Next
End Sub
Private Sub BuildTreeAndFillDrop()
chkBelongClass.Items.Clear()
ddlArticleClass.Items.Clear()
'chkBelongClass.Items.Add("是一级分类")
ddlArticleClass.Items.Add("不属于任何分类")
Dim cs As ArticleClass() = _
ArticleClass.FindAll(ArticleClass.Asc("SortNum", "Id"), New NullExpression("Parent"))
For Each el As ArticleClass In cs
Dim itm As New ListItem(el.Name, el.Id)
chkBelongClass.Items.Add(itm)
ddlArticleClass.Items.Add(itm)
BindDDLItem(el, 0)
Next
End Sub
Private Sub BindDDLItem(ByVal c As ArticleClass, ByVal level As Int16)
For Each el As ArticleClass In c.Childs
Dim itm As New ListItem(StrDup(level, " ") & "┗" & el.Name, el.Id)
chkBelongClass.Items.Add(itm)
ddlArticleClass.Items.Add(itm)
BindDDLItem(el, level + 1)
Next
End Sub
#End Region
Protected hidlink As String
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
hidlink = Request("hidlink")
If (HttpContext.Current.Items("castleactivesession") Is Nothing) Then
HttpContext.Current.Items("castleactivesession") = _
New SessionScope(FlushAction.Never)
End If
If Not IsPostBack Then
txtStDate.Text = Today.AddMonths(-1).ToString("yyyy-MM-dd")
txtEdDate.Text = Today.ToString("yyyy-MM-dd")
ViewState("mode") = "query"
BindTabs()
BuildTreeAndFillDrop()
showpane1.Enabled = False
If Not String.IsNullOrEmpty(Request("articleid")) Then
ViewState("mode") = "edit"
Try
BindData(Article.Find(Integer.Parse(Request("articleid"))))
Catch ex As NotFoundException
Response.Redirect(EditUrl("Edit"))
End Try
MultiView1.ActiveViewIndex = 1
End If
If Not String.IsNullOrEmpty(Request("addnew")) AndAlso Not String.IsNullOrEmpty(Request("addclassid")) Then
btnAdd_Click(sender, e)
End If
End If
End Sub
#Region "切换Pane"
Protected Sub showpane1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles showpane1.Click
pane2.Visible = False
pane1.Visible = True
showpane2.Enabled = True
showpane1.Enabled = False
End Sub
Protected Sub showpane2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles showpane2.Click
pane2.Visible = True
pane1.Visible = False
showpane2.Enabled = False
showpane1.Enabled = True
End Sub
#End Region
Private Sub BindData(ByVal a As Article)
hidarticleid.Value = a.Id.ToString()
txtAuthor.Text = a.Author
txtCopyFrom.Text = a.CopyFrom
txtIntro.Text = a.Intro
txtKeyWord.Text = a.Keyword
txtLinkUrl.Text = a.LinkUrl
txtMaxCharPerPage.Text = a.MaxCharPerPage.ToString()
txtSubheading.Text = a.Subheading
txtTitleColor.Text = a.TitleFontColor
txtTitleIntact.Text = a.TitleIntact
txtImg.Text = a.Img
chkIsTop.Checked = a.IsTop
txtHits.Text = a.Hits
chkneedcomment.Checked = a.ShowCommentLink
editorContent.HtmlText = a.Content
ddlPaginationType.SelectedValue = a.PaginationType
Try
ddltab.SelectedValue = a.ArticleTabId.ToString()
Catch e As ArgumentOutOfRangeException
ddltab.SelectedIndex = 0
End Try
If String.IsNullOrEmpty(a.LinkUrl) Then
rdoTab.Checked = True
Else
rdoLink.Checked = True
hidlink = "divWB"
End If
For index As Integer = 1 To chkBelongClass.Items.Count
chkBelongClass.Items(index - 1).Selected = False
Next
Dim belongs As ArticleClassRef() = ArticleClassRef.FindAll(New EqExpression("ArticleId", a.Id))
For Each cs As ArticleClassRef In belongs
For Each itm As ListItem In chkBelongClass.Items
If cs.ArticleClassId.ToString() = itm.Value Then
itm.Selected = True
End If
Next
Next
End Sub
Protected Sub btnSave_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSave.Click
Dim a As Article
If ViewState("mode") = "edit" Then
a = Article.Find(Integer.Parse(hidarticleid.Value))
ElseIf ViewState("mode") = "add" Then
a = New Article()
End If
a.AritcleKey = GuidComb.NewComb().ToString()
If rdoLink.Checked Then
a.LinkUrl = txtLinkUrl.Text
End If
If rdoTab.Checked Then
a.ArticleTabId = Integer.Parse(ddltab.SelectedValue)
a.LinkUrl = ""
End If
a.Author = txtAuthor.Text
a.CopyFrom = txtCopyFrom.Text
a.CreateTime = Now
a.Intro = txtIntro.Text
a.Keyword = txtKeyWord.Text
a.MaxCharPerPage = CInt(Val(txtMaxCharPerPage.Text))
a.Hits = Val(txtHits.Text)
a.IsTop = chkIsTop.Checked
a.ShowCommentLink = chkneedcomment.Checked
a.PaginationType = ddlPaginationType.SelectedValue
a.Subheading = txtSubheading.Text
a.TitleFontColor = txtTitleColor.Text
a.TitleIntact = txtTitleIntact.Text
a.UpdateTime = Now
If chkSaveLocal.Checked Then
Dim cnt As String = editorContent.SaveImgToLocal(editorContent.HtmlText)
a.Content = cnt
editorContent.HtmlText = cnt
Else
a.Content = editorContent.HtmlText
End If
'提取新闻图片
If chkAutoGetImg.Checked Then
Dim pattern As String = "<img.+?src\s*=\s*""(?<SRC>[^<""]*?)"".*?>"
Dim reg As New Regex(pattern, RegexOptions.IgnoreCase Or RegexOptions.Singleline Or RegexOptions.RightToLeft)
If reg.IsMatch(a.Content) Then
a.Img = reg.Match(a.Content).Groups("SRC").Value
End If
End If
'自动提取摘要
If a.Intro = "" Then
Dim pattern As String = "[^\u4e00-\u9fa5]"
a.Intro = New Regex(pattern, RegexOptions.IgnoreCase).Replace(a.Content, "")
If a.Intro.Length > 20 Then
a.Intro = a.Intro.Substring(0, 20)
End If
End If
If a.IsValid() Then
Using t As New TransactionScope(OnDispose.Rollback)
Try
a.Save()
'a.BelongsClass.Clear()
Dim belongs As ArticleClassRef() = ArticleClassRef.FindAll(New EqExpression("ArticleId", a.Id))
For Each c As ListItem In chkBelongClass.Items
If c.Selected Then
'Dim cs As ArticleClass = _
' ArticleClass.Find(Integer.Parse(c.Value))
'a.BelongsClass.Add(cs)
'查找是否原来就选中,如果不是,则增加
Dim found As Boolean = False
For i As Int16 = 0 To belongs.Length - 1
If belongs(i).ArticleClassId.ToString() = c.Value Then
found = True
Exit For
End If
Next
If Not found Then
Dim r As New ArticleClassRef()
r.ArticleClassId = Integer.Parse(c.Value)
r.ArticleId = a.Id
r.CreateAndFlush()
End If
Else
'如果原来有,就把它删掉
For i As Int16 = 0 To belongs.Length - 1
If belongs(i).ArticleClassId.ToString() = c.Value Then
belongs(i).DeleteAndFlush()
End If
Next
End If
Next
a.Update()
t.VoteCommit()
Response.Write("<script>alert('保存成功!')</script>")
ViewState("mode") = "edit"
BindData(a)
'DataCache.Refresh()
Catch ex As Exception
lblerr.Text = ex.Message
Return
End Try
End Using
Else
lblerr.Text = a.ValidationErrorMessages(0)
Return
End If
End Sub
Protected Sub btnBack_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBack.Click
'直接addnew过来的,就关闭页面
If Not String.IsNullOrEmpty(Request("addnew")) AndAlso Not String.IsNullOrEmpty(Request("addclassid")) Then
Response.Write("<script>window.close();</script>")
Response.End()
End If
If Not String.IsNullOrEmpty(Request("articleid")) Then
Response.Redirect(EditUrl())
Else
MultiView1.ActiveViewIndex = 0
End If
End Sub
Protected Sub btnFH_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnFH.Click
Response.Redirect(EditUrl())
End Sub
Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAdd.Click
ViewState("mode") = "add"
hidlink = ""
showpane1_Click(sender, e)
Dim art As New Article()
art.ShowCommentLink = True
BindData(art)
If Settings.ContainsKey("DefaultTab") Then
Try
ddltab.SelectedValue = Settings("DefaultTab")
Catch ex As ArgumentException
ddltab.SelectedIndex = 0
End Try
End If
If Not String.IsNullOrEmpty(Request("addnew")) AndAlso Not String.IsNullOrEmpty(Request("addclassid")) Then
Dim c As String = Request("addclassid").ToString()
For index As Integer = 1 To chkBelongClass.Items.Count
If c = chkBelongClass.Items(index - 1).Value Then
chkBelongClass.Items(index - 1).Selected = True
End If
Next
End If
MultiView1.ActiveViewIndex = 1
End Sub
Protected Sub btnQuery_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnQuery.Click
If ddlArticleClass.SelectedIndex > 0 Then
Dim hql As String = "from Article a Where a.Id in ( select b.ArticleId from ArticleClassRef b where b.ArticleClassId=?) and a.CreateTime>=? and a.CreateTime<=? Order By a.CreateTime Desc,a.Id Desc"
Dim q As New SimpleQuery(Of Article)(hql, Integer.Parse(ddlArticleClass.SelectedValue), DateTime.Parse(txtStDate.Text), DateTime.Parse(txtEdDate.Text).AddDays(1))
grdArticles.DataSource = q.Execute()
Else
Dim hql As String = _
"from Article a Where a.Id not in ( select b.ArticleId from ArticleClassRef b) and a.CreateTime>=? and a.CreateTime<=? Order By a.CreateTime Desc,a.Id Desc"
Dim q As New SimpleQuery(Of Article)(hql, DateTime.Parse(txtStDate.Text), DateTime.Parse(txtEdDate.Text).AddDays(1))
grdArticles.DataSource = q.Execute()
End If
grdArticles.DataBind()
End Sub
Protected Sub grdArticles_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles grdArticles.RowCommand
Select Case e.CommandName
Case "E"
ViewState("mode") = "edit"
BindData(Article.Find(Integer.Parse(e.CommandArgument)))
MultiView1.ActiveViewIndex = 1
Case "D"
Article.Find(Integer.Parse(e.CommandArgument)).DeleteAndFlush()
btnQuery_Click(sender, e)
End Select
End Sub
End Class
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -