2016-12-29 2 views
0

У меня есть представление, у которого есть Http.Action, чтобы получить частичный вид.Открытый метод действия «FetchClaimsFor? Pn = 11111 & cm = 12 & cy = 2016» не найден на контроллере «MyAPP.Controllers.ClaimMonthController»

Мой взгляд имеет следующее:

@Code 
     ViewData("Title") = "View Claims" 
     Dim actionUrl As String = "FetchClaimsFor?pn=" & ViewData("PersonnelNo") & "&cm=" & ViewData("ClaimMonth") & "&cy=" & ViewData("ClaimYear") 
    End Code 

    <div class="col-sm-12 col-md-6 col-lg-6"> 
     @Html.Action(actionUrl, "ClaimMonth") 
    </div> 

Мой ClaimMonthController имеет следующее:

<HttpGet> 
    <ChildActionOnly> 
    Function FetchClaimsFor() As PartialViewResult 

     Dim pn As String = Request.QueryString("pn") 
     Dim cm As Integer = Request.QueryString("cm") 
     Dim cy As Integer = Request.QueryString("cy") 

     Dim ClaimsMade = New OvertimeClaims 

     ClaimsMade.GetClaimsFor(pn, cm, cy) 

     Select Case tsbClaimsMade.CoreDays 

      Case 0 
       Return PartialView("_TSB0", OvertimeClaims) 
      Case 5 
       Return PartialView("_TSB5", tsbClaimsMade) 
      Case 6 
       Return PartialView("_TSB6", tsbClaimsMade) 
      Case 8 
       Return PartialView("_TSB8", tsbClaimsMade) 
      Case Else 
       Return PartialView("_TSB0", tsbClaimsMade) 

     End Select 

    End Function 

Я сделал этот подход как PartialView может быть один из 4-х типов на основе значения, возвращаемого в Свойство ClaimsMade.

К сожалению, я получаю ошибку ...

Способ общественного действия 'FetchClaimsFor? Р = 11111 & см = 12 & су = 2016' не был найден на контроллере «MyAPP.Controllers. ClaimMonthController.

Глядя на другой аналогичный вопрос в SO Я попытался с и без <HttpGet> и с и без <ChildActionOnly> - каждый раз, когда я получаю ту же ошибку.

UPDATE забыл упомянуть, я также пытался добавить Public функции

РЕШЕНИЕ

Посмотреть код должен быть:

@Html.Action("FetchClaimsFor", "ClaimMonth", New With { .pn = ViewData("PersonnelNo"), .cm = ViewData("ClaimMonth"), .cy = ViewData("ClaimYear") }) 

код контроллера должен быть:

Function FetchClaimsFor(pn As String, cm As Integer, cy As Integer) As PartialViewResult 

    REMOVE the next three lines. 
    Dim pn As String = Request.QueryString("pn") 
    Dim cm As Integer = Request.QueryString("cm") 
    Dim cy As Integer = Request.QueryString("cy") 

ответ

1

Первый параметр для Html.Action не является URL-адресом, а скорее именем действия. Вам правильно сказано, что нет действий, которые соответствуют FetchClaimsFor?pn=11111&cm=12&cy=2016. Вместо этого, вы должны делать:

@Html.Action("FetchClaimsFor", "ClaimMonth", New With { .pn = ViewData("PersonnelNo"), .cm = ViewData("ClaimMonth"), .cy = ViewData("ClaimYear") }) 

Примечание: Я не владеет в VB, так что синтаксис может быть выключен

+0

Крис, спасибо ... это имеет смысл, и я использовал аналогичный с единственным идентификатором параметра, но у этого есть три параметра ... В настоящее время с вашим предложением я все равно получаю ту же ошибку. Какие изменения в коде контроллера мне нужно сделать? Поскольку использование Request.QueryString («pn») теперь ничего не даст (я думаю ... не получилось так далеко). – Mych

+0

Сортировка .... опубликовала все связанные изменения в моем вопросе .... Спасибо за вашу помощь. – Mych

+1

FWIW, вы должны принять параметры строки запроса как параметры действия, а не пытаться вытащить их из 'Request.QueryString'. –

Смежные вопросы