无法向模型添加新字段

时间:2013-07-06 22:04:59

标签: c# asp.net-mvc

我正在尝试向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>
}}

3 个答案:

答案 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