2013-06-05 2 views
26

Я хотел поместить случайное изображение на каждую страницу просмотра моего проекта mvc. Поэтому я создал метод, который возвращает partialView и вызывает этот метод на общей странице макета.Публичный метод действий «..» не найден на контроллере «..»

Это нормально работает, когда я пытаюсь войти с правильным именем пользователя и паролем. Используется для входа в систему, и каждая страница содержит случайное изображение. Но когда я даю неверную комбинацию имени пользователя и пароля. На общей странице макета не найден контроллер, с которым я хочу позвонить, с моим @Html.Action, и на самом деле в окне просмотра должно быть возвращено сообщение об ошибке «Недействительная комбинация имени пользователя и пароля» и, конечно, со случайным изображением.

InnerException:

{ "Метод общественных действий 'RandomSponsor' не найден на контроллере 'Project.WebUI.Controllers.HomeController'"}

Мой Html.Action в общий раскладка.

@Html.Action("RandomSponsor", "Home") 

Метод в homcontontroller.

[HttpGet] 
[ChildActionOnly] 
public ActionResult RandomSponsor() 
{ 
    var model = service.getRandomSponsor(); 
    return PartialView("RandomSponsor", model); 
} 

Метод getRandomSponsor работает отлично, это всегда возвращает одно случайное строковое значение, которое возвращается к просмотру RandomSponsor.cshtml.

RandomSponsor.schtml (содержит только строка изображения)

<img src="~/Content/Images/Advert/@(Model)" alt="a" /> 

Я искал в Интернете для этой проблемы, но не нашел решение, кто-нибудь знает ответ на этот? Может ли это быть с HttpGet HttpPost?

С уважением.

+0

Вы можете опубликовать определение своего маршрута? (RegisterRoutes в global.asax), а также определение контроллера, которое имеет действие RandomSponsor(). –

+0

Я открыл ошибку для этого https://aspnetwebstack.codeplex.com/workitem/2295 –

+0

Я получал ту же ошибку, используя Mozilla Firefox 45. Выполнение этой же задачи с Google Chrome 48.0.2564.116 м, проблема исчезла. В моем случае есть некоторый JavaScript, и я подозреваю, что это проблема. – JayJay

ответ

59

Если исполняемый запрос POST, то он попытается найти способ RandomSponsor Принимает HttpPost. Если имеет смысл, вы можете удалить HttpGet, и это должно сделать трюк.

Это также может произойти, если у вас есть много уровней вызовов, которые начинаются с POST (я имел действие возвращающего вида, возвращая частичный вид призывающий RenderAction), то вызов RenderAction будет по-прежнему искать метод POST

+7

Хорошо, я видел это, и он не регистрировался сначала; если у вас есть * много уровней * вызовов, которые начинаются с POST (у меня было действие, возвращающее представление, возвращающее частичный вид, вызывающий RenderAction), тогда вызов RenderAction будет * еще * искать метод POST. Я надеюсь, что это помешает кому-то еще потратить на это четыре часа :) –

+1

Как исправить эту проблему, не удаляя атрибут '[HttpGet]'? Я хочу отправить значения маршрута методу GET, а не POST. – pt12lol

+0

О, я нашел решение. View был вызван POST, и это исключало загрузку '@ Html.Action()' GET. – pt12lol

-1

Вы сделали это с помощью Html.RenderAction? Обычно он быстрее, чем Html.Action, поскольку он напрямую взаимодействует с потоком ответов, а не строит строку.

Вы можете просмотреть следующие темы для получения дополнительной информации:

Другое дело, следует отметить, что для Html.Action или Html.RenderAction, ваш взгляд не должен быть в Общая папка, это необходимо только в том случае, если вы используете Html.Partial или Html.RenderPartial

4

Это также может произойти, если у вас есть много уровней вызовов, которые начинаются с POST (я имел действие возвращающегося вид возвращающийся частичный вид призывающий RenderAction), то вызов RenderAction будет по-прежнему искать метод POST

Очень похож на эту проблему, что я был здесь - How to solve "public action method 'methodActionName' was not found on controller 'controllerNameController'"

и если вы хотите продолжать принять HTTP GET глагола и решить проблему запроса каскадного поста в запрос GET добавить это в ваш метод

[AcceptVerbs (HttpVerbs.Get | HttpVerbs.Post)]

Имейте в виду, что [HttpGet] такая же, как [AcceptVerbs (HttpVerbs.Get)]

0

эта ошибка все вдруг на несколько различных PartialViews (не все их) при настройке установки MVCForum. Мы не внесли никаких изменений в методы или взгляды на ошибки, поэтому было очень неприятно, почему они были сломаны.

После того, как вы попытались использовать другие решения на этом посту и других, вернулись к тем изменениям, которые закончились тем, что остановили ошибки, так это то, что мы изменили привязки в IIS на другой домен, который имел URL-адрес «принудительного использования нижнего регистра» Правило перезаписи включено.

Когда мы отключили правило нижнего регистра, ошибки были остановлены, и сайт работал так, как предполагалось. Это не проблема перезаписи URL (я не думаю), потому что мы можем принудительно использовать www, используя ее без ошибок. Это проблема с перепиской в ​​нижнем регистре. Не имеет значения, было ли у нас правило нижнего регистра до или после правила www.

Это решение, вероятно, не относится ко многим случаям этой ошибки, но это сработало для нас. Надеюсь, кто-то может воспользоваться таким простым решением.

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