لمخرجات بيان حلقة التي تربط إلى وحدات تحكم differnent في MVC asp.net

StackOverflow https://stackoverflow.com/questions/1611655

  •  05-07-2019
  •  | 
  •  

سؤال

ولدي بيان حلقات في في موقعي للحصول على الأخبار ..

ولدي هذه الرموز ..

ونموذج:

Imports Microsoft.VisualBasic
Imports System.Data

Public Class ClassNewsConnection

    Inherits ClassConnection

    'Featured News for Home Page

    Public Function NewsFeatureHome() As DataTable
        Return ReadData("SELECT * FROM news WHERE newsFeature = '" & 1 & "' ORDER BY newsID DESC LIMIT 3  ")
    End Function


End Class

وحدة التحكم:

Public Class HomeController
    Inherits Global.System.Web.Mvc.Controller
    Private News As New ClassNewsConnection
    Private Announcement As New ClassAnnouncementConnection
    Private Process As New ClassHTML

Function Index() As ActionResult
        Dim dNews As DataTable = News.NewsFeatureHome()

        For dCount As Integer = 0 To dNews.Rows.Count - 1
            dNews.Rows(dCount).Item("newsTitle") = Process.ToHTML(dNews.Rows(dCount).Item("newsTitle"))
            dNews.Rows(dCount).Item("newsContent") = Process.ToHTML(dNews.Rows(dCount).Item("newsContent"))
        Next
        Return View(dData)
    End Function

End Class

والشخصي:

<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/SiteMasterPage.Master" Inherits="System.Web.Mvc.ViewPage" %>
<%@ Import Namespace="System.Data" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Home
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Index</h2>

    <div>

        <label for="News">News</label>
        <%Dim dNews As DataTable = ViewData.Model%>
        <%Dim id As Integer%>
        <%Dim dTitle As String%>

        <%For dCount As Integer = 0 To dNews.Rows.Count - 1%>
        <%Dim dContent As String = dNews.Rows(dCount).Item("newsContent")%>
        <%id = dNews.Rows(dCount).Item("newsID")%>

        <p>
        <%dTitle = dNews.Rows(dCount).Item("newsTitle")%>
        <%=Html.ActionLink(dTitle, "__________", New With {id}, DBNull.Value)%>
        <img src='<%=Url.Content("~/NewsImages/" + dNews.Rows(dCount).Item("newsThumbnail")) %>' alt="" />

        <%If dContent.Length > 100 Then%>
            <%dContent = dContent.Substring(0, dContent.IndexOf("", 300)) & "..."%>
        <%Else%>
            <%dContent = dContent%>
        <%End If%>

        <%=Html.ActionLink("Read More", "__________", New With {id}, DBNull.Value)%>
        </p>

        <%Next%>
    </div>

</asp:Content>

وعلى لمخرجات بيان صحفي حلقة مختلفة من وحدات تحكم وجهات نظر مختلفة .. مثال، إخراج الأول يمكن أن تجعل هذه الصفحة: مجتمع / CommunityNews / 7 إخراج الثاني يمكن أن تجعل هذه الصفحة: ألعاب القوى / AthleticsNews / 5 إخراج ثالث يمكن أن تجعل هذه الصفحة: برامج / ProgramsNews / 2

وكيف لي أن جعل رمز للارتباط إلى هذه الصفحات؟ سوف يمكنني استخدام جافا سكريبت؟ المشكلة هي، وأنا لست على دراية بذلك أن مع جافا سكريبت :( ساعدنى من فضلك.. شكرا جزيلا! شكرا لك!

هل كانت مفيدة؟

المحلول

ويجب أن تكون قادرة على توليد الوسيطة الثانية للأسلوب ActionLink، استنادا إلى حقل نوع الأخبار أو ما شابه ذلك في الجدول الخاص بك. منها مثلا.

<%
Dim newsType As String = dNews.Rows(dCount).Item("newsType")

Dim controllerName As String
Dim actionName as String

' I'm guessing you have a field similar to this:
If (newsType = "Com. News") then
  controllerName = "Community"
  actionName = "CommunityNews"
End If

If (newsType = "Ath. News") then 
  controllerName = "Athletics"
  actionName = "AthleticsNews"
End If
%>

<%=Html.ActionLink(dTitle, actionName, controllerName, New With {Id = id})%>

وهذا ينبغي أن تفعل خدعة، ولكن أود أن تبدأ ما يدعو للقلق أن هناك هو الحصول على الكثير من التعليمات البرمجية في طريقة العرض. قد لا يكون فكرة جيدة لتمرير DataTables في كنموذج، ولكن الامر يحتاج الى الكثير من العمل لتغيير ذلك في هذه المرحلة.

هل يمكن إنشاء أسلوب مساعد من شأنها أن تعود وحدة تحكم والعمل من أجل نوع الأخبار معين، أو الأفضل من ذلك، وتوليد وصلة بالنظر إلى نوع الأخبار. يمكنك القيام بذلك عن طريق إنشاء فئة مع طرق الإرشاد للطبقة HtmlHelper. ومن شأن ذلك أن طريقة مشابهة لهذه:

<Extension()> _
Public Sub NewsLink(ByVal htmlHelper As HtmlHelper, newsType as string, linkText As String, id As int)

    Dim action As String
    Dim controller As String

    'todo: logic to get action and controller names from news type

    return htmlHelper.ActionLink(linkText, action, controller, New With {Id = id})
End Sub

وحظا سعيدا. أعتقد أن هناك أقل الناس باستخدام VB.NET من C # مع MVC.

نصائح أخرى

وأفترض أن هذا الجزء من التعليمات البرمجية وجهة نظركم هو حيث لديك مشكلة؟

Html.ActionLink(dTitle, "__________", New With {id}, DBNull.Value)

ووDBNull.Value يبدو غريبا حقا. هل تقصد Null؟

وعلى أي حال، يجب أن تكون قادرا على استخدام الزائد مثل هذا:

Html.ActionLink(dTitle, "CommunityNews", "Community", New With {id}, Null)

لا تستخدم جافا سكريبت لذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top