für Schleifenanweisung, die auf Ausgänge differnent Controller in asp.net MVC Links
-
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!
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.