2

我想要实现的基本上是:

Items assigned to me

Item 1 assigned to me
Item 2 assigned to me
Item 3 assigned to me


All open items
Item 1 open to everyone
Item 2 open to everyone
Item 3 open to everyone
Item 4 open to everyone

尽管到目前为止我对 MVC 的体验是,我必须将数据返回到视图模型才能以以下方式在视图本身中使用它:

<asp:Content ID="ticketsContent" ContentPlaceHolderID="MainContent" runat="server">
    <div id="hdMain">
        <div id="hdMainTop"><img src="images/hdMainTop.gif" alt="" /></div>
        <div id="hdMainContent">
            <div id="numberOfCalls">Calls assigned to you (<%=Html.ViewData("MyOpenCallsCount")%>)</div>
            <div id="assignedToMe">
                <div id="callHeaders">
                    <table id="callHeadersTbl" cellpadding="0" cellspacing="0">
                        <tr>
                            <td width="54">&nbsp;</td>
                            <td width="270">Subject</td>
                            <td width="148">Logged</td>
                            <td width="120">Updated</td>
                        </tr>
                    </table>
                </div>
                <div id="greyTicketBar">&nbsp;&nbsp; Assignee: <strong><%=Html.ViewData("UserName")%></strong></div>
                <table cellpadding="0" cellspacing="0" width="643">
                        <% For Each aT In ViewData.Model%>
                            <tr>
                                <td width="54" class="ticketList">&nbsp;</td>
                                <td width="270" class="ticketList"><%=Html.ActionLink(aT.Title, "Details", New With {.id = aT.CallID})%></td>
                                <td width="148" class="ticketList"><%=aT.loggedOn.Date.ToShortDateString%></td>
                                <td width="115" class="ticketList"><%=aT.updatedOn.Date.ToShortDateString%></td>
                            </tr>
                            <% Next%>
                        </table>
            </div>
        </div>
        <div id="hdMainBottom"><img src="images/hdMainBottom.gif" alt="" /></div>
        <div id="bigbreak">
            <br />
        </div>
        <div id="hdMainTop"><img src="images/hdMainTop.gif" alt="" /></div>
        <div id="hdMainContent">
            <div id="numberOfCalls">All unsolved calls (<%=Html.ViewData("OpenCallCount")%>)</div>
            <div id="unsolvedTix">
                <div id="callHeaders">
                        <table id="callHeadersTbl" cellpadding="0" cellspacing="0">
                            <tr>
                                <td width="54">&nbsp;</td>
                                <td width="270">Subject</td>
                                <td width="148">Logged</td>
                                <td width="58">Priority</td>
                                <td width="120">Updated</td>
                            </tr>
                        </table>
                    </div>
                    <div id="greyTicketBar"></div>
                    <table cellpadding="0" cellspacing="0" width="643">
                        <% For Each t As hdCall In ViewData.Model%>
                            <tr>
                                <td width="51" class="ticketList" align="center"><img src="/images/icons/<%=t.hdPriority.Priority%>.gif" /></td>
                                <td width="270" class="ticketList"><%=Html.ActionLink(t.Title, "Details", New With {.id = t.CallID})%></td>
                                <td width="148" class="ticketList"><%=t.loggedOn%></td>
                                <td width="58" class="ticketList"><%=t.hdPriority.Priority%></td>
                                <td width="115" class="ticketList"><%=t.updatedOn%></td>
                            </tr>
                            <% Next%>
                        </table>
                </div>
        </div>
        <div id="hdMainBottom"><img src="images/hdMainBottom.gif" alt="" /></div>
    </div>
    <div id="hdSpacer"></div>
    <div id="hdMenus">
        <div id="browseBox">
            <div id="blueTop"><img src="images/blueboxTop.gif" /></div>
            <div id="blueContent">
                <img src="images/browse.gif" alt="Browse" /><br /><br />
                <ul>
                    <li>&nbsp;<a href="/Calls/Company/1">Calls for Topps</a><br /><br /></li>
                    <li>&nbsp;<a href="/Calls/Company/2">Calls for TCH</a><br /><br /></li>
                </ul>
            </div>
            <div id="blueBottom"><img src="images/blueboxBottom.gif" /></div>
            <br />
             <div id="Dashboard">
            <div id="blueTop"><img src="images/blueboxTop.gif" /></div>
            <div id="blueContent"><img src="images/dashboard.gif" alt="Dashboard" /><br /><br />
                <div id="storePercent"><%=Html.ViewData("OpenCallCount")%><br />
                    Calls Open</div>
                <ul style="font-weight: bold;">
                    <li>&nbsp;<a href="/Calls/Urgent">Urgent:&nbsp;<%=Html.ViewData("UrgentCallCount")%></a><br /><br /></li>
                    <li>&nbsp;<a href="/Calls/High">High:&nbsp;<%=Html.ViewData("HighCallCount")%></a><br /><br /></li>
                    <li>&nbsp;<a href="/Calls/Normal">Normal:&nbsp;<%=Html.ViewData("NormalCallCount")%></a><br /><br /></li>
                    <li>&nbsp;<a href="/Calls/Low">Low:&nbsp;<%=Html.ViewData("LowCallCount")%></a></li>
                </ul>
            </div>
            <div id="blueBottom"><img src="images/blueboxBottom.gif" /></div>
        </div>
        </div>
</asp:Content>

现在,即使我知道它行不通,我的想法基本上是:

'
' GET: /Calls/
<Authorize()> _
Function Index() As ActionResult
    ViewData("OpenCallCount") = callRepository.CountOpenCalls.Count()
    ViewData("UrgentCallCount") = callRepository.CountUrgentCalls.Count()
    ViewData("HighCallCount") = callRepository.CountHighCalls.Count()
    ViewData("NormalCallCount") = callRepository.CountNormalCalls.Count()
    ViewData("LowCallCount") = callRepository.CountLowCalls.Count()

    ViewData("MyOpenCallsCount") = callRepository.CountMyOpenCalls(Session("LoggedInUser")).Count()
    ViewData("UserName") = Session("LoggedInUser")

    Dim viewOpenCalls = callRepository.FindAllOpenCalls()
    Dim viewMyOpenCalls = callRepository.FindAllMyCalls(Session("LoggedInUser"))

    Return View(viewOpenCalls)
    Return View(viewMyOpenCalls)
End Function

我想知道的是,这样做的正确方法是什么?我不知道如何走正确的路,但我想我至少有理论,只是不知道如何实现它。

感谢您提前提供任何帮助。


编辑

根据以下评论,我进行了以下代码编辑/添加:

Class Calls
    Private _OpenCalls As hdCall
    Public Property OpenCalls() As hdCall
        Get
            Return _OpenCalls
        End Get
        Set(ByVal value As hdCall)
            _OpenCalls = value
        End Set
    End Property
    Private _MyCalls As hdCall
    Public Property MyCalls() As hdCall
        Get
            Return _MyCalls
        End Get
        Set(ByVal value As hdCall)
            _MyCalls = value
        End Set
    End Property
End Class

索引()动作

'
' GET: /Calls/
<Authorize()> _
Function Index() As ActionResult
    ViewData("OpenCallCount") = callRepository.CountOpenCalls.Count()
    ViewData("UrgentCallCount") = callRepository.CountUrgentCalls.Count()
    ViewData("HighCallCount") = callRepository.CountHighCalls.Count()
    ViewData("NormalCallCount") = callRepository.CountNormalCalls.Count()
    ViewData("LowCallCount") = callRepository.CountLowCalls.Count()

    ViewData("MyOpenCallsCount") = callRepository.CountMyOpenCalls(Session("LoggedInUser")).Count()
    ViewData("UserName") = Session("LoggedInUser")

    Dim viewOpenCalls As New Calls With {.OpenCalls = callRepository.FindAllOpenCalls()}
    Dim viewMyOpenCalls As New Calls With {.MyCalls = callRepository.FindAllMyCalls(Session("LoggedInUser"))}

    Return View(New Calls())
End Function

调用/索引.aspx

<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Calls>" %>

<%@ Import Namespace="CustomerServiceHelpdesk" %>

<asp:Content ID="ticketsHeader" ContentPlaceHolderID="TitleContent" runat="server">
    Topps Customer Service Helpdesk - View All Calls
</asp:Content>

<asp:Content ID="ticketsContent" ContentPlaceHolderID="MainContent" runat="server">
    <div id="hdMain">
        <div id="hdMainTop"><img src="images/hdMainTop.gif" alt="" /></div>
        <div id="hdMainContent">
            <div id="numberOfCalls">Calls assigned to you (<%=Html.ViewData("MyOpenCallsCount")%>)</div>
            <div id="assignedToMe">
                <div id="callHeaders">
                    <table id="callHeadersTbl" cellpadding="0" cellspacing="0">
                        <tr>
                            <td width="54">&nbsp;</td>
                            <td width="270">Subject</td>
                            <td width="148">Logged</td>
                            <td width="120">Updated</td>
                        </tr>
                    </table>
                </div>
                <div id="greyTicketBar">&nbsp;&nbsp; Assignee: <strong><%=Html.ViewData("UserName")%></strong></div>
                <table cellpadding="0" cellspacing="0" width="643">
                        <% For Each aT In Model.MyCalls%>
                            <tr>
                                <td width="54" class="ticketList">&nbsp;</td>
                                <td width="270" class="ticketList"><%=Html.ActionLink(aT.Title, "Details", New With {.id = aT.CallID})%></td>
                                <td width="148" class="ticketList"><%=aT.loggedOn.Date.ToShortDateString%></td>
                                <td width="115" class="ticketList"><%=aT.updatedOn.Date.ToShortDateString%></td>
                            </tr>
                            <% Next%>
                        </table>
            </div>
        </div>
        <div id="hdMainBottom"><img src="images/hdMainBottom.gif" alt="" /></div>
        <div id="bigbreak">
            <br />
        </div>
        <div id="hdMainTop"><img src="images/hdMainTop.gif" alt="" /></div>
        <div id="hdMainContent">
            <div id="numberOfCalls">All unsolved calls (<%=Html.ViewData("OpenCallCount")%>)</div>
            <div id="unsolvedTix">
                <div id="callHeaders">
                        <table id="callHeadersTbl" cellpadding="0" cellspacing="0">
                            <tr>
                                <td width="54">&nbsp;</td>
                                <td width="270">Subject</td>
                                <td width="148">Logged</td>
                                <td width="58">Priority</td>
                                <td width="120">Updated</td>
                            </tr>
                        </table>
                    </div>
                    <div id="greyTicketBar"></div>
                    <table cellpadding="0" cellspacing="0" width="643">
                        <% For Each t As hdCall In Model.OpenCalls%>
                            <tr>
                                <td width="51" class="ticketList" align="center"><img src="/images/icons/<%=t.hdPriority.Priority%>.gif" /></td>
                                <td width="270" class="ticketList"><%=Html.ActionLink(t.Title, "Details", New With {.id = t.CallID})%></td>
                                <td width="148" class="ticketList"><%=t.loggedOn%></td>
                                <td width="58" class="ticketList"><%=t.hdPriority.Priority%></td>
                                <td width="115" class="ticketList"><%=t.updatedOn%></td>
                            </tr>
                            <% Next%>
                        </table>
                </div>
        </div>
        <div id="hdMainBottom"><img src="images/hdMainBottom.gif" alt="" /></div>
    </div>
    <div id="hdSpacer"></div>
    <div id="hdMenus">
        <div id="browseBox">
            <div id="blueTop"><img src="images/blueboxTop.gif" /></div>
            <div id="blueContent">
                <img src="images/browse.gif" alt="Browse" /><br /><br />
                <ul>
                    <li>&nbsp;<a href="/Calls/Company/1">Calls for Topps</a><br /><br /></li>
                    <li>&nbsp;<a href="/Calls/Company/2">Calls for TCH</a><br /><br /></li>
                </ul>
            </div>
            <div id="blueBottom"><img src="images/blueboxBottom.gif" /></div>
            <br />
             <div id="Dashboard">
            <div id="blueTop"><img src="images/blueboxTop.gif" /></div>
            <div id="blueContent"><img src="images/dashboard.gif" alt="Dashboard" /><br /><br />
                <div id="storePercent"><%=Html.ViewData("OpenCallCount")%><br />
                    Calls Open</div>
                <ul style="font-weight: bold;">
                    <li>&nbsp;<a href="/Calls/Urgent">Urgent:&nbsp;<%=Html.ViewData("UrgentCallCount")%></a><br /><br /></li>
                    <li>&nbsp;<a href="/Calls/High">High:&nbsp;<%=Html.ViewData("HighCallCount")%></a><br /><br /></li>
                    <li>&nbsp;<a href="/Calls/Normal">Normal:&nbsp;<%=Html.ViewData("NormalCallCount")%></a><br /><br /></li>
                    <li>&nbsp;<a href="/Calls/Low">Low:&nbsp;<%=Html.ViewData("LowCallCount")%></a></li>
                </ul>
            </div>
            <div id="blueBottom"><img src="images/blueboxBottom.gif" /></div>
        </div>
        </div>
</asp:Content>

但是,该行<%=Html.ViewData("MyOpenCallsCount")%>给了我一个 End of Statement 预期的错误。

另外,我确实让它编译了一次,但是我Unable to cast object of type 'System.Data.Linq.DataQuery1[CustomerServiceHelpdesk.hdCall]' to type 'CustomerServiceHelpdesk.hdCall'.从该行得到了错误Dim viewOpenCalls As New Calls With {.OpenCalls = callRepository.FindAllOpenCalls()}

我哪里做错了?

当涉及到这样的事情时,我有点菜鸟,所以非常感谢任何帮助。

4

3 回答 3

10

好吧,你不能从一个函数返回两个值,如果那是你想要做的(标题表明这就是你想要的)。
另外,http无论如何,这不是工作方式。一个请求总是只有一个响应。

但是,如果您尝试将您的对象viewOpenCallsviewMyOpenCalls对象都发送到一个视图,那么您可以通过使您的视图具有一个可以同时容纳它们的模型来做到这一点。

像这样 :

//My VB is a bit rusty so I'm writing this in C#
class Calls {
    public yourDataType OpenCalls { get; set; }
    public yourDataType MyCalls { get; set; }
}

在您的控制器操作中:

return View(new Calls { OpenCalls = viewOpenCalls,  MyCalls = viewMyOpenCalls })

//I gues in VB it would be like this :
Dim viewOpenCalls = callRepository.FindAllOpenCalls()
Dim viewMyOpenCalls = callRepository.FindAllMyCalls(Session("LoggedInUser"))
Return View(New Calls _
    With {.OpenCalls = viewOpenCalls, .MyCalls = viewMyOpenCalls})

在您看来,确保它的模型是类的Calls类型。

<%@ Page Inherits="System.Web.Mvc.ViewPage<Calls>" %>

<%=Model.OpenCalls %>现在您可以使用和访问属性<%=Model.MyCalls %>

于 2009-10-21T10:05:39.440 回答
2

一旦我找到了正确的方法(现在走了一会儿),我就让它工作了。

作为参考,这是应该这样做的方式:

Public Class TheCalls
Private _OpenCalls As IQueryable(Of hdCall)
Public Property OpenCalls() As IQueryable(Of hdCall)
    Get
        Return _OpenCalls
    End Get
    Set(ByVal value As IQueryable(Of hdCall))
        _OpenCalls = value
    End Set
End Property
Private _AssignedCalls As IQueryable(Of hdCall)
Public Property AssignedCalls() As IQueryable(Of hdCall)
    Get
        Return _AssignedCalls
    End Get
    Set(ByVal value As IQueryable(Of hdCall))
        _AssignedCalls = value
    End Set
End Property
End Class
于 2009-12-08T15:29:38.773 回答
1

1) 创建一个 ViewData 类。这只是一个 POCO 类,它为要在视图上显示的每个数据项定义了属性(例如 OpenCallCount)

2) 创建一个使用这个 ViewData 类的强类型视图。

3) 将带有属性集的 ViewData 类的新实例传递给您的视图。

这将帮助您避免在任何地方使用魔术字符串(例如 ViewData("OpenCallCount") = ... 变为 myViewDataClass.OpenCallCount = ...)

您可能可以通过使用两个局部视图类来整理视图,或者使其更通用一些,但它现在可以完成这项工作。

于 2009-10-21T10:52:55.187 回答