ASP.NET MVC
- Validare conditionala pe client - in cazul in care ascund/afisez dinamic unele campuri pe client, campuri care vreau sa fie validate atunci cand sunt afisate
- le pot scoate atributul name cand sunt ascunse, urmand sa il adaug doar cand le afisez.
- Performanta
- Controllerele care suporta sesiunea sunt tratate ca fiind sincrone in contextul unui user => daca avem o pagina cu mai multe apeluri AJAX catre acelasi controller, apelurile se vor executa unul dupa altul in loc sa fie rulate asincron. Daca decorez controller-ul cu atributul [SessionState(SessionStateBehavior.Disabled)] => nu mai suporta sesiunea => e asincron.
- Folosirea numelor proprietatilor in template-uri
- ViewData.TemplateInfo.GetFullHtmlFieldId("") - spre deosebire de ViewData.ModelMetadata.PropertyName , functioneaza si in cazul id-urilor ca Items[4].Name
- Ascunderea anumitor proprietati din model la randare (nu ma refer la HiddenInput)
- Aplic atributul ScaffoldColumn(false)
- Initializarea sesiunii NHibernate in Application_BeginRequest
- Din cate vad, e de preferat sa fac asta in Application_PostMapRequestHandler, ca sa am acces la HttpContext.Current.CurrentHandler
protected void Application_PostMapRequestHandler(object sender, EventArgs e) { if (Context.CurrentHandler is MvcHandler) SessionManager.BeginTransaction(); }
- Validare custom pe server
// inregistrarea mesajului de eroare pe server ViewData.ModelState.AddModelError("ABC", "Mesajul meu de eroare"); return View(myPrettyModel); //afisarea mesajului de eroare in view @Html.ValidationMessage("ABC")
- Global Filters + Dependency Injection
- Clasa de mai jos e invocata automat daca e configurat DI-ul in aplicatie (si daca e inregistrata in container :) ).
public class FilterProvider : IFilterProvider { public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) { return new[] { ActionFilter<MyCustomFilter>() }; } private static Filter ActionFilter<T>(int? order = null) { return new Filter(DependencyResolver.Current.GetService<T>(), FilterScope.Action, order); } }
- Accesarea unui UrlHelper dintr-o metoda de extensie a HtmlHelper
var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext); var url = urlHelper.Action("Home", "Index")
- Localizare folosind resurse
- Nu ar trebui folosit directorul App_GlobalResources pentru a pastra resursele, pentru ca are niste probleme in MVC
- Fisierul .resx ar trebui setat ca EmbeddedResource, iar custom tool-ul selectat ar trebui sa fie PublicResXFileCodeGenerator (pentru ca membrii generati sa poata fi accesati din view-uri).
- Pentru a accesa resursele din alte proiecte decat cel web: ResourceManager = new ResourceManager("Website.GlobalRes", Assembly.Load(new AssemblyName("Website")));
- Mai multe detalii: http://odetocode.com/Blogs/scott/archive/2009/07/16/resource-files-and-asp-net-mvc-projects.aspx
- Unobtrusive validation pentru content generat dinamic
- http://stackoverflow.com/questions/5965470/client-side-validation-with-dynamically-added-field
- dupa care $('#myForm').validate().form()
- Prevent automatic encoding
- @Html.Raw(<text>)
- "The name 'model' does not exist in the current context" - cand incerc sa randez un view
- Probabil a fost sters web.config-ul din directorul Views
- Trimiterea de obiecte dinamice si anonime in view-uri
- Nu merge, din cauza ca proprietatile obiectelor anonime sunt internal, iar view-urile se compileaza in alt assembly.
- Detalii: http://stackoverflow.com/questions/5120317/dynamic-anonymous-type-in-razor-causes-runtimebinderexception/5670899#5670899
- Modificarea valorilor dintr-o forma serializata, care urmeaza sa fie postata pe server prin jQuery.post
var form = $('#myForm').serializeArray(); form.push({ name:'val1', value: 6 }); form.push({ name:'val2', value: 29 }); $.post('@Url.Action("MyAction")', form);
- Creez o area noua, dar nu e recunoscuta in aplicatie
AreaRegistration.RegisterAllAreas(); <- in Application_Start
page revision: 22, last edited: 14 Jan 2012 18:28