我有一个这样的自定义模型:
public class ViewModel
{
[DisplayName("Property One")]
string PropertyOne { get; set; }
[DisplayName("Property Two")]
string PropertyTwo { get; set; }
....
}
当我基于此模型创建新的强类型视图时,我得到以下内容:
<% using (Html.BeginForm()) {%>
<%= Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% } %>
如果我取出DisplayName
属性,它仍然无效。我还注意到,如果我更改模型并根据该模型重新创建视图,则不会考虑新的更改。这几乎就像VS在某处缓存模型一样,让它更新的唯一方法是关闭/重新打开解决方案,然后创建视图。
默认情况下创建的LogOnModel
文件中的AccountModels.cs
实际上是相同的(只有它具有较少的属性),并且工作正常。我可能会错过我定义模型的方式吗?似乎无法弄清楚我在这里做错了什么。
修改
如果我尝试手动输入视图标记,也会注意到,例如
<%@ Page ... Inherits="System.Web.Mvc.ViewPage<MySite.Models.ViewModel>" %>
...
<div class="editor-label">
<%= Html.LabelFor(model => model.PropertyOne) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(model => model.PropertyOne)%>
<%= Html.ValidationMessageFor(model => model.PropertyOne)%>
</div>
我收到编译错误CS1061: 'MySite.Models.ViewModel' does not contain a definition for 'PropertyOne'
。
我现在要得出的结论是Visual Studio在这个领域真的很麻烦。我使用的是最新版本( 9.0.30729.1 SP )
答案 0 :(得分:1)
.....不,等等,抓一点。这是我的大脑有问题,我从界面复制并粘贴属性以保存自己的一些打字,只是注意到我忘了将它们设置为public
。
如果有人遇到同样的问题,就会出现这种情况,因为它并不是很明显,并且花了很长时间(足够长的时间我必须在这里发帖!)来弄清楚发生了什么。