Почему контроллер запрашивает полный путь для просмотра в mvc3?

0

Я написал один partialview для action method.if, давая полный путь этого частичного представления в методе действий, который он собирается, но напрямую возвращает view(), который не возвращает view.why, запрашивая полный путь представления? пожалуйста, дай мне знать.

[HttpPost]
        public ActionResult SearchResults(FormCollection collection)
        {
 return View("/Areas/Admin/Views/Search/ShowResults.ascx",vm); --it working
//return View(); --it not returning view.why?
}

маршрут:

routes.MapRoute(
                "Default",                                                 // Route name
                "{controller}/{action}/{id}",                              // URL with parameters
                new { area = "", controller = "home", action = "index", id = "" },   // Parameter defaults
                new string[] { "MVC.Web.Controllers" }
            );
  • 0
    пожалуйста, напишите ваш код
  • 0
    Поскольку это представление не назначено действию, каркас SearchResults не может найти соответствующее представление. Щелкните правой кнопкой мыши имя действия и нажмите «Перейти», чтобы посмотреть, что это показывает?
Показать ещё 5 комментариев
Теги:
asp.net-mvc-3

1 ответ

0

Причина, по которой это происходит, заключается в том, что у вас нет представления под названием SearchResults (имя вашего действия). Представление, которое вы возвращаете, - ShowResults. Поскольку вы используете представление, не названное так же, как имя действительного действия, вам нужно его указать. Кроме того, поскольку вы возвращаете частичное представление, хорошая практика сказать MVC, что вы это делаете, используя return PartialView метод return PartialView

[HttpPost]
public ActionResult SearchResults(FormCollection collection)
{
  return PartialView("ShowResults", vm);
}

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

[HttpPost]
public ActionResult SearchResults(FormCollection collection)
{
    return PartialView("~/Areas/Admin/Views/Search/ShowResults.ascx",vm);
}

Кроме того, при использовании полных путей обязательно указывайте символ ~ как это говорит о том, что IIS/.NET начинает искать корень вашего приложения, а не корень сайта. Теперь это может работать, но если вы переместите свой сайт в виртуальный каталог или что-то не в корне домена, он будет терпеть неудачу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню