tag password net mvc form for asp asp.net-mvc asp.net-mvc-2 partial-views editorfor

asp.net mvc - password - Representación del nombre de campo en una Plantilla de Editor(presentada a través de EditorFor())



select asp-for asp-items (3)

Actualmente estoy creando el back-end de administración para un sitio web en ASP.NET MVC.

En una aplicación ASP.NET MVC, comencé a utilizar el método de ayuda ''EditorFor'' de la siguiente manera:

<div id="content-edit" class="data-form"> <p> <%= Html.LabelFor(c => c.Title) %> <%= Html.TextBoxFor(c => c.Title)%> </p> <p> <%= Html.LabelFor(c => c.Biography) %> <%= Html.EditorFor(c => c. Biography)%> </p> </div>

En el modelo, el campo ''Biografía'' ha sido decorado con: [UIHelper ("Html")].

Tengo una vista parcial ''Html'' (en Views / Shared / EditorTemplates):

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.XML.Linq.XElement>" %> <textarea class="html"> <%= Model.ToString() %> </textarea>

Ahora me gustaría tener el atributo ''ID'' de ''textarea'' establecido en el nombre del campo, como este:

<textarea id="Biography" class="html"> ... </textarea>

Pero no veo una manera de hacerlo con la configuración actual.

Todo lo que puedo pensar es en crear un modelo de vista ''Html'' que contenga una propiedad ''Value'' y una propiedad ''ControlID''.

Pero si baso la vista en lugar de ''System.XML.Linq.XElement'', ya no sería compatible con el método de ayuda ''EditorFor'' y tendría que hacer todo manualmente.

Alguien ha tenido un problema similar?


En nuestro caso, tuvimos que usar Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName con ExpressionHelper.GetExpressionText

que en la maquinilla de afeitar se usó así:

// hiddenFor was caching the value of this html input, and the value alone, nothing else on the page! Expression<Func<Web.ViewModels.ApiSettingsViewModel, int>> expression = (m => m.OrgApiLoginCredentials[i].OrgApiLoginId); } <input type="hidden" value="@Model.OrgApiLoginCredentials[i].OrgApiLoginId" name="@Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression))" class="data-org-api-login-id"/>


He estado usando esto para generar ID (con el prefijo del modelo). Omita la parte .Replace () si desea el atributo de nombre.

<%=Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(String.Empty).Replace(".", HtmlHelper.IdAttributeDotReplacement) %>


Debería poder extraer el ID deseado de la propiedad ViewData.TemplateInfo.HtmlFieldPrefix de la vista. Me gusta esto:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.XML.Linq.XElement>" %> <textarea id="<%= ViewData.TemplateInfo.HtmlFieldPrefix %>" class="html"> <%= Model.ToString() %> </textarea>

Para mostrar por qué funciona esto, este es el lugar en TemplateHelpers.cs (de la fuente MVC2 Preview 1) donde ViewData se inicializa para el control de plantilla del Editor:

ViewDataDictionary viewData = new ViewDataDictionary(html.ViewDataContainer.ViewData) { Model = modelValue, TemplateInfo = new TemplateInfo { FormattedModelValue = formattedModelValue, ModelType = modelType, HtmlFieldPrefix = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(expression), IsNullableValueType = (underlyingNullableType != null), } };

En la llamada anterior, se inicializa "expresión" (más arriba en la pila de llamadas) con el nombre de la propiedad que se está editando.

Por cierto, @Sperling a continuación captó un detalle que olvidé originalmente: si está usando (o podría usar) un HtmlHelper.IdAttributeDotReplacement no predeterminado, entonces querrá reemplazar los puntos en la propiedad HtmlHelper.IdAttributeDotReplacement con HtmlHelper.IdAttributeDotReplacement .