2013-07-06 4 views
0

Я пытаюсь добавить новое поле «UserInput» в мою модель UserProfile. Сначала я добавил поле в таблицу 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> 
}} 
+0

Я не вижу 'UserInput' в вашей модели' UserProfile' только 'UserInputTwo' – haim770

+0

Ваша модель именования UserInput в UserInputTwo. Я бы подумал, что модели понадобится, чтобы он назывался UserInput. Кроме того, может быть полезно увидеть остальную часть «Ошибка 1». – puddinman13

+0

Жаль, что это была только опечатка в этом посте, она исправлена. – kgst

ответ

0

Проблема в том, что вы передаете IEnumerable модель. В этом случае вы должны перечислить все элементы модели и передать их методам HtmlHelper. И в этом случае я рекомендую вам пройти список на ваш взгляд, как это:

@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> 
    } 
} 
0

Ключ к вашей проблемы является то, что вы на самом деле не читает вашу ошибку.

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

Ваше мнение имеет модель типа IEnumerable и IEnumerable не имеет ничего под названием UserInput в нем. В вашем UserProfile есть UserInput.

Либо вы передаете неправильный тип модели в представление, либо вам нужно перебирать элементы IEnumerable, чтобы получить фактические данные.

0

Бит, который работает, потому что вы используете foreach над вашей моделью IEnumerable. Бит, который не работает, состоит в том, что вы не перебираете свою коллекцию IEnumerable. IEnumerable не имеет свойства UserInput.

Попытайтесь изменить декларацию модели.

@model FTv2.Models.UserProfile 
Смежные вопросы