Utilizzare una legacy ASP.NET ASCX Controllo Utente in MVC Razor vista

Sto cercando di implementare un framework MVC Razor _Layout.cshtml pagina che utilizza un Modulo ascx Controllo Utente (non MVC). Sto facendo questo in base al largo il “Sì” di questo Scott Hansleman articolo “Miscelazione Rasoio Vista e WebForms Pagine Master con ASP.NET MVC 3” http://www.hanselman.com/blog/MixingRazorViewsAndWebFormsMasterPagesWithASPNETMVC3.aspx

L’articolo spiega come utilizzare lo stesso Utente ascx Controllo sia in una webform Sito.Pagina Master come MVC Razor _Layout pagina.

Da quello che ho letto altrove su Stackoverflow è possibile utilizzare i precedenti ascx controlli utente (così come ASP.NET webform controlli server) in MVC pagine. Utilizzando la seguente riga dovrebbe rendere il controllo utente ascx nel mio Rasoio _Layout:

@{ Html.RenderPartial("~/UserControls/WebUserControl1.ascx"); }

Tuttavia, che genera l’errore:

The view at '~/UserControls/WebUserControl1.ascx' must derive from ViewPage,
ViewPage<TModel>, ViewUserControl, or ViewUserControl<TModel>.

Ho provato anche il seguito con risultati simili:

@Html.Partial("~/UserControls/WebUserControl1.ascx")

Quello che mi manca qui?

InformationsquelleAutor Walter | 2011-10-28



3 Replies
  1. 16

    Come il messaggio di errore membri, il controllo utente “deve derivare da … ViewUserControl“. Nel file code-behind per il controllo utente, è sufficiente modificare questo…

    public partial class WebUserControl1 : UserControl
    {
        //...
    }

    … a questo:

    public partial class WebUserControl1 : ViewUserControl
    {
        //...
    }

    ViewUserControl eredita da UserControl, in modo che continuerà a lavorare nel vostro esistente WebForms pagine.

    Si può avere a che fare con altri problemi al di là di questo, per ottenere il controllo utente di lavorare in MVC, però. Almeno un altro che ho incontrato è (citata da SLaks):

    Controllo ‘controlId’ di tipo ‘controlType’ deve essere inserito all’interno di un tag form con runat=server.

    Se si verificano cose come questo, si sta andando ad avere per ottenere creativo. Modificare il controllo utente in modo che si può vivere felicemente in entrambi i WebForms e MVC (sostituire offendere controlli generici equivalenti HTML – con tutte le implicazioni di che), o duplicare in modo che si dispone di un WebForms versione e MVC versione.

    Per esempio, sarà necessario sostituire cose come <asp:TextBox ID="search"> con <input type="text" name="search" />, il che significa che è necessario modificare il codice lato server che gestisce il valore proveniente da quella di ingresso. Fondamentalmente è necessario sterilizzare il controllo utente, conversione da qualcosa che ha usato per incarnare sia la vista logica di rendering e post-back logica di gestione, in qualcosa che solo il rendering di una vista.

    Si può fare una ascx controllo gioca bene con entrambi i moduli web e Rasoio MVC, e per le cose semplici come intestazioni e piè di pagina o di sola lettura visualizzazioni di dati, questo è un buon approccio per la migrazione di un’applicazione MVC. Ma per cose più complesse come moduli di input, probabilmente sarà più facile da mantenere sia un ascx controllo utente e una MVC Razor vista.

  2. 9

    è possibile utilizzare asp.net controllo utente in MVC dal seguente modo

    1 ° cambio di controllo utente eredità di questo come di default

    default:

    public partial class TestControl: UserControl
    {
    //...
    }

    modifica:

    public partial class TestControl: ViewUserControl
    {
    //...
    }`

    2 ° controllo utente con asp.net controlli come questo all’interno del tag form e script manager dovrebbe essere chiamata

    <%@ 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 ° Chiamata di controllo utente in MVC Vista come

    @{ Html.RenderPartial("~/UserControls/TestControl.ascx"); }

    dovrebbe funzionare senza alcun problema, e sarà utile per convertire i vecchi asp.net sito web MVC, se il vecchio sito con controlli utente, la sua così facile da aggiornare con le nuove tecnologie in MVC.

    • che è la soluzione migliore quando si utilizza asp.net userconrol con MVC.
  3. 3

    Non è possibile utilizzare il classico ASP.Net controlli utente (w/postback e ViewState) in ASP.Net MVC.

    Html.Partial solo consente di eseguire il rendering di viste parziali, che capita di utilizzare la stessa estensione, ma non sono la stessa cosa.

    • un po ‘ fuorviante, come lungo come si aggiorna il USSO di ereditare ViewUserControl si sta bene…stackoverflow.com/questions/6538869/…
    • Da “classica ASP.Net controlli utente”, voglio dire postback e ViewState, che non funziona.

Lascia un commento