⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 editarticle.ascx.vb

📁 如果不使用IIS,请先运行 XSP.exe,待提示已侦听 8080端口后
💻 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 + -