Я бы немного изменил архитектуру - измените ваш редактор LabelTextBoxValidation на Html-помощник, а затем создайте один EditorTemplate для вашей модели данных. Таким образом, вы можете сделать что-то вроде этого:
<% using (Html.BeginForm("Details", "User", FormMethod.Post))
{%>
<fieldset>
<legend>Userinfo</legend>
<% Html.EditorFor(m => m); %>
</fieldset>
<input type="submit" id="btnChange" value="Change" />
<% } %>
И ваш шаблон редактора будет выглядеть примерно так:
<%= Html.ValidatedTextBoxFor(m => m.Name); %>
<%= Html.ValidatedTextBoxFor(m => m.Email); %>
<%= Html.ValidatedTextBoxFor(m => m.Telephone); %>
где ValidatedTextBoxFor - ваш новый помощник по HTML. Чтобы сделать это, было бы довольно легко:
public static MvcHtmlString ValidatedTextBoxFor<T>(this HtmlHelper helper, Expression thingy)
{
// Some pseudo code, Visual Studio isn't in front of me right now
return helper.LabelFor(thingy) + helper.TextBoxFor(thingy) + helper.ValidationMessageFor(thingy);
}
Это должно установить имена полей формы правильно, как я полагаю, поскольку это кажется источником проблемы.
РЕДАКТИРОВАТЬ : Вот код, который должен вам помочь:
public static MvcHtmlString ValidatedTextBoxFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
{
return MvcHtmlString.Create(
html.LabelFor(expression).ToString() +
html.TextBoxFor(expression).ToString() +
html.ValidationMessageFor(expression).ToString()
);
}