Значение переопределения для пользовательского TextBoxFor - PullRequest
0 голосов
/ 24 марта 2019

У меня есть ViewModel, которая использует свойства сложных типов, например:

public class UserViewModel {
    [Required]
    [Display(Name = "First Name")]
    [MaxLength(50, ErrorMessage = "Too Long")]
    public PresentationObjectField FirstName { get; set; }
}

public class PresentationObjectField
{
    public string FieldValue { get; set; }
    public bool IsLocked { get; set; }
    public string FieldLogicalName { get; set; }
}

Мне нужно создать собственное текстовое поле с некоторыми пользовательскими классами и атрибутами, поэтому в классе HtmlHelper я вызываю следующий метод:

private static string CreateTextBoxField<TModel, TValue>(HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> expression, RouteValueDictionary htmlAttributes, string fieldValue, bool isLocked)
    {
        htmlAttributes.Add("data-oldvalue", fieldValue);

        if (isLocked)
        {
            htmlAttributes.Add("readonly", "read-only");
        }

        MvcHtmlString textbox = htmlHelper.TextBoxFor(expression, htmlAttributes);
        return textbox.ToString();
    }

Проблема в том, что когда я создаю TextBoxFor, он использует выражение для установки значения ввода. Выражение имеет сложный тип, и когда оно оценивает значение, ему присваивается полное имя типа вместо строки с именем. Мне нужно, чтобы при вызове Html.TextBoxFor (m => m.FirstName) значение было установлено равным m.FirstName.FieldValue.

Если я вызываю помощника, например Html.TextBoxFor (m => m.FirstName.FieldValue), я теряю все аннотации данных для ненавязчивой проверки.

Есть ли способ переопределить значение текстового поля?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...