自定义TextBoxFor

时间:2019-03-24 03:19:43

标签: c# .net model-view-controller

我有一个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)这样调用帮助程序,则会丢失所有数据注释,以进行不干扰用户的验证。

反正还有覆盖文本框的值吗?

0 个答案:

没有答案