我有一个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)这样调用帮助程序,则会丢失所有数据注释,以进行不干扰用户的验证。
反正还有覆盖文本框的值吗?