1

Вызов Html.RenderPartial("~/Views/Payments/MyControl.ascx"); из представления работает, если MyControl.ascx является элементом управления, который непосредственно наследует System.Web.Mvc.ViewUserControl.Оказание производного частичного представления с помощью Html.RenderPartial

Однако, если элемент управления наследует новый класс, производный от System.Web.Mvc.ViewUserControl, вызов Html.RenderPartial("~/Views/Payments/MyDerivedControl.ascx"); сбоит, сообщая, что такой вид не существует.

Пример получен System.Web.Mvc.ViewUserControl:

class MyDerivedControl : System.Web.Mvc.ViewUserControl 
{ 
    public Method() 
    { 
     ViewData["SomeData"] = "test"; 
    } 
} 

Есть обходной путь, или есть другой способ, я должен делать это? Возможно, помощник HTML?

ответ

0

С точки зрения MVC это не очень хороший дизайн, чтобы обеспечить представление данных. Обычно это ответственность диспетчера. В зависимости от контекста и того, что представляют эти данные, вы можете использовать хелпер HTML или написать фильтр действий. Вот пример с фильтром пользовательского действия:

public class SomeDataActionFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     base.OnActionExecuting(filterContext); 
     filterContext.Controller.ViewData["SomeData"] = "test"; 
    } 
} 

А потом украсить свои действия с этим фильтром:

[SomeDataActionFilter] 
public ActionResult Index() 
{ 
    return View(); 
} 
+0

мнение не предоставляет данные; мой вопрос в том, что передача данных передается в ** полученное ** частичное представление и результирующая ошибка при попытке отобразить его после интерпретации (по производному классу ViewUserControl). Откуда взялись данные, не имеет значения. –

+1

@FreshCode, я понятия не имею, почему это конкретное исключение происходит. Все, что я могу вам сказать, это то, что представления не должны наследоваться так, как вы пытаетесь использовать приложение MVC. Представления предназначены только для отображения данных, поступающих с контроллера. Существуют такие методы, как «Мастер-страницы», «Частичные представления», «Помощники HTML», которые позволяют создавать и повторно использовать функциональность в «Представлениях». В шаблоне проекта ASP.NET MVC по умолчанию, сгенерированном VS, нет даже файла '.cs', связанного с вашими элементами' ascx'. –

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