Как говорится в сообщении об ошибке, пользовательский элемент управления "должен быть производным от ... ViewUserControl
". В файле кода для вашего пользовательского элемента управления просто измените это ...
public partial class WebUserControl1 : UserControl
{
// ...
}
... к этому:
public partial class WebUserControl1 : ViewUserControl
{
// ...
}
ViewUserControl
наследуется от UserControl
, поэтому он будет продолжать работать на ваших существующих страницах WebForms.
Возможно, вам придется иметь дело с дополнительными проблемами помимо этой, чтобы заставить ваш пользовательский элемент управления работать в MVC. По крайней мере, одна другая, с которой я столкнулся (на которую ссылается SLaks ):
Элемент управления 'controlId' типа 'controlType' должен быть помещен в тег формы с помощью runat = server.
Если вы столкнетесь с такими вещами, вам придется проявить творческий подход. Либо измените пользовательский элемент управления, чтобы он мог счастливо жить как в WebForms, так и в MVC (замените нарушающие элементы управления общими эквивалентами HTML - со всеми вытекающими отсюда последствиями), или дублируйте его, чтобы иметь версию WebForms и версию MVC.
Например, вам придется заменить такие вещи, как <asp:TextBox ID="search">
на <input type="text" name="search" />
, что означает, что вам также нужно изменить код на стороне сервера, который обрабатывает значение, поступающее из этого ввода. По сути, вы должны нейтрализовать пользовательский элемент управления, преобразовав его из чего-то, что использовалось для воплощения логики рендеринга представлений и логики постобработки, во что-то, что просто визуализирует представление.
Вы можете заставить один ascx
элемент управления хорошо играть как с WebForms, так и с Razor MVC, а для простых вещей, таких как верхние и нижние колонтитулы страниц или представления данных только для чтения, это хороший подход для переноса приложение к MVC. Но для более сложных вещей, таких как формы ввода, вероятно, будет проще поддерживать пользовательский элемент управления ascx
и представление MVC Razor.