Controller come fabbrica ascx - cattiva idea?
-
09-10-2019 - |
Domanda
Sto cercando di creare qualcosa di simile fabbrica .ascxs *.
Scenario: Vorrei rendere controlli che dipende dal modello, che ho passato a PartialView. Mi piacerebbe realizzare qualcosa di simile a questo:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyAbstractModel>" %>
<%= Model.Property1 %>
<!-- other more sophisticated displays on model -->
<% Html.RenderAction("RenderControl", "Factory", new { model = Model}); %>
FactoryController:
public ActionResult RenderControl(object model) {
if (model.GetType() == typeof(Model1) {
return RenderPartial("Partial2", model);
} else {
return RenderPartial("Partial1", model);
}
}
Mi piacerebbe sapere c'è un modo migliore per far fronte a tale situazione. Suppongo che non è il metodo più efficace per pagina web costruire in ASP.MVC 2.
Se questo metodo è accettabile, come posso limitare l'accesso a tale controllore? Vorrei utilizzare questa classe solo sul lato server e solo le pagine ascxs'
Soluzione
Usa l'attributo ChildActionOnly()
per limitare l'accesso alle vostre azioni.
Che cosa si sta cercando di fare è già incorporato al MVC: Html.DisplayFor()
See: http: //bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html