pour les sorties d'instructions de boucle qui sont liées aux différents contrôleurs dans asp.net mvc

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

  •  05-07-2019
  •  | 
  •  

Question

j'ai une déclaration en boucle dans ma page d'accueil pour les nouvelles ..

J'ai ces codes ..

Modèle:

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

Contrôleur:

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

Voir:

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

L’instruction for loop génère différentes informations provenant de différents contrôleurs et vues. Exemple, le premier résultat pourrait rendre cette page: Community / CommunityNews / 7 la deuxième sortie pourrait rendre cette page: Athletics / AthleticsNews / 5 la troisième sortie pourrait afficher cette page: Programmes / ProgrammesNews / 2

comment pourrais-je créer le code pour le lien vers ces pages? vais-je utiliser javascript? le problème est, je ne suis pas si familier avec javascript :( Aidez-moi, s'il vous plaît.. Merci! merci!

Était-ce utile?

La solution

Vous devriez pouvoir générer le deuxième argument de la méthode ActionLink, basé sur un champ de type de news ou similaire dans votre table. par exemple

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

Cela devrait faire l'affaire, mais je commencerais par m'inquiéter qu'il y ait trop de code dans la vue. Ce n'est peut-être pas une bonne idée de passer DataTables en tant que modèle, mais cela pourrait demander beaucoup de travail pour le changer à ce stade.

Vous pouvez créer une méthode d'assistance qui renverra le contrôleur et l'action pour un certain type d'actualité, ou mieux encore, générera un lien en fonction du type d'actualité. Vous pouvez le faire en créant une classe avec des méthodes d'extension pour la classe HtmlHelper. Cette méthode ressemblerait à ceci:

<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

Bonne chance. Je pense qu'il y a moins de gens utilisant VB.NET que C # avec MVC.

Autres conseils

Je suppose que cette partie de votre code de vue est l'endroit où vous avez un problème?

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

Le DBNull.Value a vraiment l’air étrange. Voulez-vous dire Null ?

Quoi qu'il en soit, vous devriez pouvoir utiliser une surcharge telle que celle-ci:

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

N'utilisez pas JavaScript pour cela.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top