我正在尝试向UserProfile模型添加一个新字段“UserInput”。首先,我使用以下命令将该字段添加到我的UserProfile表中:
ALTER TABLE [Database].[dbo].[UserProfile]
ADD UserInput nvarchar(max) NULL
一切似乎都很好。然后我把它添加到我的模型中,产生了以下内容:
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public string FID { get; set; }
public string UserInput { get; set; }
}
但是当我尝试将它添加到我的View中时,它给了我一条红色的波浪线,错误:
Error 1 'System.Collections.Generic.IEnumerable<FTv2.Models.UserProfile>' does not contain a definition for 'UserInput' and no extension method 'UserInput' accepting a first argument of type 'System.Collections.Generic.IEnumerable<FTv2.Models.UserProfile>' could be found (are you missing a using directive or an assembly reference?)
我错过了什么吗?我之前能够以这种方式添加一个字段,也许有人可以告诉我这次错过了什么?此外,我尝试运行代码并在尝试访问该页面时出错,如下所示:
Line 14: <legend>Edit</legend>
Line 15: <div class="editor-label">
Line 16: @Html.LabelFor(model => model.UserInput)
Line 17: </div>
Line 18: <div class="editor-field">
提前感谢您的帮助!
编辑:看起来问题是因为我正在尝试从该视图编辑字段,因为如果我只尝试访问item.UserInput,则返回正常。这是代码不起作用的地方:
@model IEnumerable<FTv2.Models.UserProfile>
using (Html.BeginForm()) {
<fieldset>
<legend>Edit</legend>
<div class="editor-label">
@Html.LabelFor(model => model.UserInput)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.UserInput)
@Html.ValidationMessageFor(model => model.UserInput)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
但它适用于下半部分:
@{ foreach (var item in Model) {
<p>User Input: @item.UserInputTwo</p>
}}
答案 0 :(得分:0)
问题是因为您正在传递IEnumerable模型。 在这种情况下,您应该枚举所有模型项并将它们传递给HtmlHelper方法。 在这种情况下,我建议您在视图中传递List,如下所示:
@model List<FTv2.Models.UserProfile>
@using (Html.BeginForm()) {
for (int i = 0; i < Model.Count; i++)
{
<fieldset>
<legend>Edit</legend>
<div class="editor-label">
@Html.LabelFor(model => model[i].UserInput)
</div>
<div class="editor-field">
@Html.EditorFor(model => model[i].UserInput)
@Html.ValidationMessageFor(model => model[i].UserInput)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
}
答案 1 :(得分:0)
问题的关键在于您实际上并未阅读错误。
'System.Collections.Generic.IEnumerable<FTv2.Models.UserProfile>' does
^^^^^^^^^^^^
not contain a definition for 'UserInput'
您的视图具有IEnumerable类型的模型,IEnumerable中没有任何名为UserInput的模型。您的UserProfile具有UserInput。
要么将错误的模型类型传递给视图,要么需要迭代IEnumerable的元素以获取实际数据。
答案 2 :(得分:0)
有效的一点是因为你在IEnumerable模型上使用foreach
。不起作用的一点是因为你没有遍历你的IEnumerable集合。 IEnumerable没有UserInput
属性。
尝试更改模型声明。
@model FTv2.Models.UserProfile