für Schleifenanweisung, die auf Ausgänge differnent Controller in asp.net MVC Links

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

  •  05-07-2019
  •  | 
  •  

Frage

ich habe eine Schleife-Anweisung in meiner Homepage news ..

Ich habe diese Codes ..

Modell:

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

Controller:

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

Ausblick:

<%@ 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>

die for-Schleife-Anweisung gibt unterschiedliche Nachrichten aus verschiedenen Controllern und Ansichten .. Beispiel, die erste Ausgabe konnte diese Seite machen: Community / Community / 7 die zweite Ausgabe konnte diese Seite machen: Leichtathletik / AthleticsNews / 5 die dritte Ausgabe dieser Seite machen könnte: Programme / ProgramsNews / 2

Wie würde ich machen, den Code für den Link zu diesen Seiten? werde ich Javascript verwenden? Das Problem ist, ich bin mit Javascript nicht so vertraut :( Hilfe bitte.. Dankeschön! danke!

War es hilfreich?

Lösung

Es soll möglich sein, das zweite Argument für die Action Verfahren zu erzeugen, basierte auf einem Nachrichten-Feld oder ähnlich in der Tabelle. z.

<%
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})%>

Das sollte es tun, aber ich würde anfangen zu befürchten, dass es wird immer in der Ansicht zu viel Code zu sein. Es ist vielleicht nicht eine gute Idee sein Tables als Modell passiert in, aber es könnte eine Menge Arbeit nehmen, dass an diesem Punkt zu ändern.

Sie können eine Hilfsmethode erstellen, die den Controller und die Aktion für eine bestimmte Nachrichtentyp zurück, oder besser noch, erzeugen eine Verbindung der Nachrichtentyp gegeben. Sie können das tun, indem Sie eine Klasse mit Erweiterungsmethoden für die Htmlhelper-Klasse erstellen. Diese Methode würde so aussehen:

<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

Viel Glück. Ich denke, es gibt weniger Menschen mit VB.NET als C # mit MVC.

Andere Tipps

Ich gehe davon aus, dass dieser Teil Ihrer Ansicht Code ist, wo Sie ein Problem haben?

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

Die DBNull.Value sieht wirklich seltsam. Haben Sie Null das?

Auf jeden Fall sollten Sie in der Lage sein, eine Überlastung wie folgt zu verwenden:

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

Verwenden Sie JavaScript nicht für diese.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top