لمخرجات بيان حلقة التي تربط إلى وحدات تحكم differnent في MVC asp.net
-
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)
لا تستخدم جافا سكريبت لذلك.