Usar um legado ASP.NET controlo de utilizador ASCX na vista de navalha MVC
o artigo diz como usar o mesmo controlo de utilizador ascx em ambos os sites webform.Página principal, bem como uma navalha MVC _Layout pagina.
pelo que li em outro lugar no Stackoverflow é possível usar os controles de usuário do ascx legacy (bem como ASP.NET webform server controls) em páginas MVC. A utilização da seguinte linha deverá tornar o controlo do utilizador ascx na minha _Layout:
@{ Html.RenderPartial("~/UserControls/WebUserControl1.ascx"); }
No entanto, isso lança o erro:
The view at '~/UserControls/WebUserControl1.ascx' must derive from ViewPage,
ViewPage<TModel>, ViewUserControl, or ViewUserControl<TModel>.
também tentei o seguinte com resultados semelhantes:
@Html.Partial("~/UserControls/WebUserControl1.ascx")
O que me está a escapar?
3 answers
Como diz a mensagem de erro, o controlo do utilizador "deve derivar de ... ViewUserControl
". No código atrás do arquivo para o seu controle de usuário, basta alterar isso...
public partial class WebUserControl1 : UserControl
{
// ...
}
... a isto:
public partial class WebUserControl1 : ViewUserControl
{
// ...
}
ViewUserControl
herda de UserControl
, por isso continuará a funcionar nas suas páginas web existentes.
Você pode ter que lidar com problemas adicionais para além deste, a fim de obter o seu controle de usuário para trabalhar em MVC, no entanto. Pelo menos um outro que encontrei é (aludido por esclavagistas):
Se encontrares coisas destas, vais ter de ser criativo. Modifique o controle do Usuário para que ele possa viver feliz em ambos WebForms e MVC (substitua os controles ofensivos por equivalentes HTML genéricos - com todas as implicações disso), ou duplicá-lo para que você tenha uma versão WebForms e uma versão MVC.O controlo 'controlId' do tipo 'controlType' deve ser colocado dentro de uma marca de formulário com runat=server.
Para exemplo, você terá que substituir coisas como <asp:TextBox ID="search">
por <input type="text" name="search" />
, o que significa que você também precisa modificar o código do lado do servidor que lida com o valor que vem dessa entrada. Basicamente você tem que neutralizar o controle do Usuário, convertendo-o de algo que costumava incorporar tanto ver rendering logic e pós-back handling logic, em algo que apenas torna uma vista.
Vocêpode fazer um ascx
Controle jogar bem com ambos WebForms e Razor MVC, e para coisas simples como cabeçalhos de páginas e rodapés ou vistas de dados apenas para leitura, esta é uma boa abordagem para migrar uma aplicação para MVC. Mas para coisas mais complexas, como formulários de entrada, provavelmente será mais fácil manter tanto um controle de usuário ascx
e uma visão de navalha MVC.
Pode usar asp.net controlo do utilizador em MVC da seguinte forma
Primeira alteração da herança de controlo do utilizador por omissão
Predefinição:
public partial class TestControl: UserControl
{
// ...
}
Alteração:
public partial class TestControl: ViewUserControl
{
// ...
}`
Segundo controlo de utilizador com asp.net controlos como este dentro da marca do formulário e do Gestor de programas devem ser call
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestControl.ascx.cs" Inherits="TestApp.UserControls.TestControl" %>
<div>
<h1>Welcome Test User Control</h1>
<form id="test" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:TextBox runat="server" ID="txtbxTest" Text="Hello">
</asp:TextBox>
</form>
</div>
3º controlo do utilizador de chamadas na área de MVC como
@{ Html.RenderPartial("~/UserControls/TestControl.ascx"); }
Deve funcionar sem qualquer problema, e será benéfico converter o velho asp.net website para MVC, se Antigo website ter controles de usuário, é tão fácil de atualizar com a nova tecnologia em MVC.
Você não pode usar o classic ASP.Net usercontrols (w / postbacks e ViewState) em ASP.Net acidente de viação.
Html.Partial
só lhe permite renderizar visualizações parciais, que por acaso usam a mesma extensão, mas não são as mesmas.