0

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

但是当我尝试将它添加到我的视图中时,它给了我一条红色波浪线,并出现错误:

 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>
}}
4

3 回答 3

0

你的问题的关键是你实际上并没有阅读你的错误。

'System.Collections.Generic.IEnumerable<FTv2.Models.UserProfile>' does 
                            ^^^^^^^^^^^^
 not contain a definition for 'UserInput' 

您的视图具有 IEnumerable 类型的模型,而 IEnumerable 中没有任何称为 UserInput 的内容。您的 UserProfile 具有 UserInput。

您将错误的模型类型传递给视图,或者您需要遍历 IEnumerable 的元素以获取实际数据。

于 2013-07-06T22:45:37.233 回答
0

起作用的一点是因为您使用的是foreachIEnumerable 模型。不起作用的一点是因为您没有循环遍历您的 IEnumerable 集合。IEnumerable 没有UserInput属性。

尝试更改您的模型声明。

@model FTv2.Models.UserProfile
于 2013-07-06T22:47:48.933 回答
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>
    }
}
于 2013-07-06T22:28:41.260 回答