Рендеринг Частично с тем же именем, что и родительский вид - Сбой WebDev.WebServer40.exe - PullRequest
2 голосов
/ 29 июля 2010

Мне интересно, есть ли у других людей такая же проблема или это только у меня!

Учитывая, что у меня есть представление Purchases.aspx и частичное представление Purchases.ascx:

В пределах Purchases.aspx если я сделаю: Html.RenderPartial("Purchases"), тогда WebDev.WebServer40.exe в основном закроется.

Я предполагаю, что это вызвано переполнением стека, поскольку RenderPartial не может определить, что он должен отображать (.aspx или .ascx).

Это ошибка, это определенное поведение, или это просто происходит для меня?

1 Ответ

7 голосов
/ 29 июля 2010

Это определенное поведение, поскольку ViewLocationFormats и PartialViewLocationFormats определены следующим образом, и сначала будет просматриваться страница aspx.

ViewLocationFormats = new[] {
            "~/Views/{1}/{0}.aspx",
            "~/Views/{1}/{0}.ascx",
            "~/Views/Shared/{0}.aspx",
            "~/Views/Shared/{0}.ascx"
        }; 

PartialViewLocationFormats = ViewLocationFormats;

PartialViewLocationFormats должен исключать определения aspx, по моему мнению.Переопределение стандартного WebFormViewengine может решить эту проблему.Обратите внимание, вам необходимо зарегистрировать это в методе Application_Start()

public class ASPXViewEngine: WebFormViewEngine
{
    public ASPXViewEngine()
    {
        base.PartialViewLocationFormats =
                new string[]
                    {
                        "~/Views/{1}/{0}.ascx",
                        "~/Views/Shared/{0}.ascx"
                    };

        base.AreaPartialViewLocationFormats =
                new string[]
                    {
                        "~/Areas/{2}/Views/{1}/{0}.ascx",
                        "~/Areas/{2}/Views/Shared/{0}.ascx",
                    };
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...