2010-06-17 22 views
21

ich ein begginer in asp.net MVC bin, und ich habe einen Zweifel:Client-ID für Immobilien (ASP.Net MVC)

Ich versuche, ein Label für eine TextBox in meiner Ansicht zu tun und ich ‚wollen wissen, wie kann ich einen Id, die in Client übertragen werden Skripte generete ... zum Beispiel:

<label for="<%=x.Name.ClientId%>"> Name: </label> 
<%=Html.TextBoxFor(x=>x.Name) %> 

Was muss ich setzen in‚ClientId‘, um sicherzustellen, dass die korrekte Id sein rendern zu der entsprechenden Kontrolle?

Dank

Prost

Antwort

38

Setzen Sie diesen Code irgendwo:

using System; 
using System.Linq.Expressions; 
using System.Web.Mvc; 

namespace MvcLibrary.Extensions 
{ 
    public static class HtmlExtensions 
    { 
     public static MvcHtmlString FieldIdFor<TModel, TValue>(this HtmlHelper<TModel> html, 
      Expression<Func<TModel, TValue>> expression) 
     { 
      string htmlFieldName = ExpressionHelper.GetExpressionText(expression); 
      string inputFieldId = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName); 
      return MvcHtmlString.Create(inputFieldId); 
     } 
    } 
} 

Dann in Ihrer ASPX Ansicht:

<label for="<%= Html.FieldIdFor(m => m.EmailAddress) %>">E-mail address:</label> 
<%= Html.TextBoxFor(m => m.EmailAddress) %> 

Sie auch diese in JavaScript als Anrufe verwenden können Sie werden die ID des Steuerelements nicht im Voraus kennen und benötigen möglicherweise JavaScript-Code, um dagegen zu arbeiten:

<script> $.CoolJQueryFunction('<%= Html.FieldIdFor(m => m.EmailAddress) %>'); </script> 

Die LabelFor HTML-Hilfsmethode, die hier erwähnt wird, lässt Sie nicht die tatsächliche Textbezeichnung angeben, die Sie verwenden möchten, Sie müssen Ihre ViewModels mit Attributen dekorieren, um den Beschriftungstext zu setzen, mit IMHO ist hässlich. Ich würde eher, dass diese Sachen in der tatsächlichen ASPX-View-Teil selbst erscheinen, nicht auf einigen Domain/View-Modell. Manche Leute werden mir nicht zustimmen.

Nicht sicher der Regeln für die Links zu einem Blog-Beiträge zu veröffentlichen, aber ich schrieb einen Blog auf genau diesem Thema: http://www.dominicpettifer.co.uk/Blog/37/strongly-typed--label--elements-in-asp-net-mvc-2

+0

Ich weiß, aber manche Leute können nicht richtig verstehen (mein Englisch ist nicht sehr gut)! Das ist alles was ich brauche ... Danke vielmals! Decorate Domain Model Klassen mit Attributen ist keine gute Übung für mich, ich stimme dir zu! –

+6

Dies sollte Teil des Frameworks sein. – pbz

+0

Funktioniert nicht ganz innerhalb von Benutzersteuerelementen (d. H. .ascx) –

-2

Verwenden Sie die folgenden Schritte aus:

Model.Name 

Sie können einfach nicht ein „Quelltext anzeigen“ oder untersuchen die gerenderte Textbox mit so etwas wie Firebug, um zu sehen, was die Html.xyzFor() Methoden generieren. Normalerweise erzeugen sie ein Textfeld mit den Attributen "id" und "name", die beide auf den Namen der Eigenschaft festgelegt sind.

+0

es den Inhalt der Eigenschaft schreiben werde, und ich brauche es nicht .. Ich brauche die Namen der Eigenschaft (oder Client-Id ... wenn es ein ... ich weiß nicht, excatly) –

+0

@FelipeOriani @womp bei der Verwendung von 'Html.LabelFor (x => x.Id)' es zeigt mir den "Id" Text, die ich 'DisplayName' von Id definiert statt Id-Wert, der von DB kommt. Irgendwelche Kommentare? – Steve

0

Wie bereits erwähnt, brauchen Sie sich keine Gedanken über ClientID, UniqueID usw. in ASP.NET MVC zu machen, da dies Webform-Abstraktionen sind. Sie können einfach die gewünschte ID einfach ausschreiben. Es gibt auch eine Erweiterung Methode hierfür:

<%= Html.LabelFor(x => x.Name) %> 
+1

LabelFor gibt Ihnen eine stark typisierte

27

MVC 4 dies jetzt gebaut hat .. siehe this

+1

It's nice dude! Vielen Dank ;) –

5

Sein Spaß, was kann bei freiem Quellcode von MVC gefunden werden. Hier ist die Antwort:

@ Html.IdFor oder @ Html.NameFor

Also, was ist der Unterschied? Hier ist der Haken:

Der NameFor würde kein "." zu "_".

Wenn Sie beispielsweise möchten, I have found this cool small article