【问题标题】:Can I have more than one "Details" ActionResult in a controller?我可以在一个控制器中有多个“详细信息”ActionResult 吗?
【发布时间】:2009-10-07 10:52:09
【问题描述】:

我有一个名为 TicketsController.vb 的控制器,其操作结果为:

'
' GET: /Tickets/Details/5
Public Function Details(ByVal id As Integer) As ActionResult
    ViewData("OpenTixCount") = ticketRepository.countOpenTickets.Count()
    ViewData("UrgentTixCount") = ticketRepository.countUrgentTickets.Count()
    ViewData("HighTixCount") = ticketRepository.countHighTickets.Count()
    ViewData("NormalTixCount") = ticketRepository.countNormalTickets.Count()
    ViewData("LowTixCount") = ticketRepository.countLowTickets.Count()

    Dim ticket As hdCall = ticketRepository.GetTicket(id)

    If ticket Is Nothing Then
        Return View("NotFound")
    Else
        ViewData("MyTicketID") = ticket.CallID
        ViewData("UserThatLogged") = ticket.hdUser.RealName
        ViewData("CustomerName") = ticket.hdCustomer.CustomerName
        ViewData("TimeLogged") = ticket.loggedOn.ToLongDateString & " " & ticket.loggedOn.ToLongTimeString
        ViewData("CustomerID") = ticket.CustomerID
        ViewData("CustomerEmail") = ticket.hdCustomer.Email

        Dim custID As Integer = ticket.CustomerID
        Dim TicketsForCustomer = ticketRepository.GetTicketsForThisCustomer(custID).Count()

        ViewData("TicketsForCustomerCount") = TicketsForCustomer
        Dim dataContext As New CustomerServicesDataContext
        ViewData("TicketStatus") = New SelectList(dataContext.hdStatus, "StatusID", "Status", ticket.StatusID)
        ViewData("TicketType") = New SelectList(dataContext.hdCategories, "CategoryID", "Title", ticket.CategoryID)
        ViewData("TicketPriority") = New SelectList(dataContext.hdPriorities, "PriorityID", "Priority", ticket.PriorityID)
        ViewData("CompanyType") = New SelectList(dataContext.hdCompanies, "CompanyID", "Company", ticket.CompanyID)
        ViewData("CallDetails") = ticket.CallDetails

    End If

    Return View(ticket)
End Function

我还添加了另一个名为“客户”的名称,旨在按客户 ID 获取工单列表。我用来执行此操作的代码是:

'
'GET: /Tickets/Customer/1
Public Function Customer(ByVal custID As Integer) As ActionResult
    ViewData("OpenTixCount") = ticketRepository.countOpenTickets.Count()
    ViewData("UrgentTixCount") = ticketRepository.countUrgentTickets.Count()
    ViewData("HighTixCount") = ticketRepository.countHighTickets.Count()
    ViewData("NormalTixCount") = ticketRepository.countNormalTickets.Count()
    ViewData("LowTixCount") = ticketRepository.countLowTickets.Count()

    Dim cust As hdCustomer = customerRepository.GetCustomerDetails(custID)

    Dim tickets = ticketRepository.FindAllTicketsForThisCustomer(custID)

    ViewData("CustomerName") = cust.CustomerName
    ViewData("CustomerEmail") = cust.Email
    Dim TicketsForCustomer = ticketRepository.GetTicketsForThisCustomer(custID).Count()

    ViewData("TicketsForCustomerCount") = TicketsForCustomer

    Return View(tickets)
End Function

但是,例如当我访问 /Tickets/Customers/1 的页面时,我收到错误:

参数字典包含一个 参数“custID”的空条目 不可为空的类型“System.Int32” 方法'System.Web.Mvc.ActionResult 客户(Int32)'在 'CustomerServicesHelpdesk.TicketsController'。 使参数可选其类型 应该是引用类型或 可空类型。参数名称: 参数

我不太确定我哪里出错了,但可能是因为我有 2 个 ActionResults 正在寻找类似的路线吗?

提前感谢您的帮助。

【问题讨论】:

    标签: asp.net-mvc model-view-controller asp.net-mvc-routing


    【解决方案1】:

    出现此问题是因为 ASP.NET MVC 中的 default 路由需要将参数命名为 id,但您的 Customer 方法采用名为 custID 的参数。

    快速解决方法是将custID 重命名为id

    另一种解决方案是在 Global.asax 中添加自定义路由。像这样的

    routes.MapRoute(
        "Tickets",                                                  // Route name
        "Tickets/Customers/{custID}",                               // URL with parameters
        new { controller = "Home", action = "Index", custID = "" }  // Parameter defaults
        );
    

    【讨论】:

      【解决方案2】:

      能否请您发布您的路线定义?如果您使用的是默认路由定义,请尝试在方法定义中将 custID 重命名为 id,使其变为:

      Public Function Customer(ByVal id As Integer) As ActionResult
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多