Comment obtenir L'id HTML généré par asp.net MVC EditorFor
j'utilise les Helpers HTML pour rendre mes champs:
<%=Html.EditorFor(m => m.User.Surname)%>
et la sortie serait quelque chose comme ceci:
<input class="text-box single-line" id="User_Surname"
name="User.Surname" type="text" value="" />
l'assistant utilise le nom de classe + '.'è fieldName pour construire l'id.
J'ai besoin de passer l'id d'une fonction jQuery. Est-il un moyen de l'avoir sans le coder en dur?
Peut-être un assistant qui peut utiliser le ASP.NET conventions MVC2?
4 réponses
ASP.NET MVC 4 A Html.IdFor () construit dans qui peut retourner ce:
@Html.IdFor(m => m.User.Surname)
voir cette question: obtenir le clientid généré pour un champ de formulaire , c'est ma réponse:
j'utilise cet helper:
public static partial class HtmlExtensions
{
public static MvcHtmlString ClientIdFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression)
{
return MvcHtmlString.Create(
htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(
ExpressionHelper.GetExpressionText(expression)));
}
}
utilisez-le comme n'importe quel autre assistant: @Html.ClientIdFor(model=>model.client.email)
j'ai suivi les instructions de la réponse de Mac ici et j'ai construit ma propre extension personnalisée:
public static class HtmlHelperExtensions
{
public static string HtmlIdNameFor<TModel, TValue>(
this HtmlHelper<TModel> htmlHelper,
System.Linq.Expressions.Expression<Func<TModel, TValue>> expression)
{
return (GetHtmlIdNameFor(expression));
}
private static string GetHtmlIdNameFor<TModel, TValue>(Expression<Func<TModel, TValue>> expression)
{
if (expression.Body.NodeType == ExpressionType.Call)
{
var methodCallExpression = (MethodCallExpression)expression.Body;
string name = GetHtmlIdNameFor(methodCallExpression);
return name.Substring(expression.Parameters[0].Name.Length + 1).Replace('.', '_');
}
return expression.Body.ToString().Substring(expression.Parameters[0].Name.Length + 1).Replace('.', '_');
}
private static string GetHtmlIdNameFor(MethodCallExpression expression)
{
var methodCallExpression = expression.Object as MethodCallExpression;
if (methodCallExpression != null)
{
return GetHtmlIdNameFor(methodCallExpression);
}
return expression.Object.ToString();
}
}
j'ai importé l'espace de nom de mon application
<%@ Import Namespace="MvcApplication2" %>
et enfin je peux utiliser mon code comme ceci:
<%=Html.HtmlIdNameFor(m=>m.Customer.Name)%>
sauf si vous créez votre propre utilisateur.Nom de famille Editoremplate que vous passez dans certains attributs HTML vous ne pourrez pas le faire avec EditorFor
cependant vous pouvez utiliser TextBoxFor
et définir l'id
<%= Html.TextBoxFor(m => m.User.Surname, new { id = "myNewId" })%>
sur le thème de la récupération de cet élément avec un sélecteur jQuery vous pouvez réaliser ceci sans avoir à coder dur en utilisant certains des se termine-avec le sélecteur . L'aide que vous pourrait probablement encore utiliser EditorFor
et juste le sélectionner avec $("[id^='Surname
]". Si vous essayez de sélectionner cet élément spécifique, il n'y a vraiment aucun moyen de ne pas hardcode quelque chose dans votre code jQuery.