1

如果我有这样的ViewModel

public class SignupViewModel
{
   [Required]
   [DisplayName("Email:")]
   public string EmailAddress { get; set; }   
}

并使用EditorFor呈现表单字段:

@Html.EditorFor(model => model.EmailAddress )

它会渲染<input type="text">. 凉爽的。

但在这种特殊情况下,我已经从不同的来源检索了电子邮件,我希望用这些数据预先填写表格,并显示一个标签而不是文本框(因为我不希望他们更改他们的电子邮件 -不要担心为什么)。

我知道我可以使用[UIHint],但我可以从控制器以编程方式执行此操作吗?

例如:

var model = new SignupViewModel();
model.EmailAddress = GetFromMysterySource(); // How do i set a UIHint?

解决这个问题的最佳方法是什么?我应该完全使用单独的 ViewModel,这可能意味着将我的视图从强类型更改为存在dynamic,或者我不应该使用EditorFor,还是应该使用自定义编辑器模板?

建议/建议将不胜感激。

4

1 回答 1

2

您不能在运行时应用属性。我的建议是在您的视图中构建一些逻辑来控制视图如何呈现数据。您可能需要扩充模型以向视图指示要选择的显示。

  @if (Model.EmailAddressIsFixed)
  {
     @Html.DisplayFor( m => m.EmailAddress )
     @Html.HiddenFor( m => m.EmailAddress ) // only if you need it to post back
  }
  else
  {
     @Html.EditorFor( m => m.EmailAddress )
  }

如果您在不止一个地方执行此操作,那么执行相同操作的自定义编辑器模板可能是合适的。

  @Html.EditorFor( m => m.EmailAddress, 
                   "FixedAddressTemplate",
                   new { Fixed = Model.EmailAddressIsFixed } )
于 2011-04-05T01:21:51.093 回答