2016-08-24 3 views
0

Следующий код иллюстрирует использование модели класса: StudentПроверка ИНТ данных из базы данных

public class Student: IAbstract 
{ 
    public int StudentID { get; set; } 
    public string FirstName { get; set; } 
    public int Age { get; set; } 
    //Some methods 
} 

этого метода index() от StudentController

public ActionResult Index() 
{ 
    var model = new List<Student>(); 

    var objStudent = new Student(); 
    var cmd = new SqlBuilder(); 
    cmd.CommandText = "SELECT StudentID, FirstName, Age FROM Students"; 
    var data = objStudent.Select(cmd); 

    foreach (DataRow item in data.Tables[0].Rows) 
    { 
     model.Add(new Student 
     { 
      StudentID = Convert.ToInt32(item["StudentID"]), 
      FirstName = item["FirstName"].ToString(), 
      Age = item.IsNull("Age")?0:Convert.ToInt32(item["Age"]) //Here 
     }); 
    } 

    return View("Index", model); 
} 

Как вы можете видеть, что я должен проверить, если " Age "имеет значение null, потому что в моем db (для целей тестирования) некоторые ученики не имеют возраста. Но я не хочу устанавливать Age на 0 для просмотра, так что это лучший способ показать ячейку «void» в представлении вместо 0 ?.

Часть кода вида:

<body> 
    <table> 
     <tr> 
      <th> 
       @Html.DisplayNameFor(model => model.StudentID) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.FirstName) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.Age) 
      </th> 

      <th></th> 
     </tr> 
     @foreach (var item in Model) 
     { 
      <tr> 
       <td> 
        @Html.DisplayFor(modelItem => item.StudentID) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.FirstName) 
       </td> 
       <td> 
        @Html.DisplayFor(modelItem => item.Age) 
       </td> 

       <td> 
        @Html.ActionLink("Edit", "Edit", new { id = item.StudentID }) | 
        @Html.ActionLink("Details", "Details", new { id = item.StudentID }) | 
        @Html.ActionLink("Delete", "Delete", new { id = item.StudentID }) 
       </td> 
      </tr> 
     } 
    </table> 
</body> 

ответ

2

Набор Age быть обнуляемым INT:

public int? Age { get; set; } 

Затем значение по умолчанию не будет ничего, а не 0.

Ваш синтаксический логика тогда может выглядеть так:

Age = item.IsNull("Age") ? null : (int?)Convert.ToInt32(item["Age"]) //Here 
+0

Я думал об этом, но я получаю следующую ошибку: Ошибка Тип условного выражения не может быть определен, потому что нет никакого неявного преобразования между '' и 'int' ' – FacundoGFlores

+1

whoops, yep, вам нужно указать право стороны 'int?', чтобы сделать условную операцию действительной. См. Мое редактирование. – Jonesopolis

Смежные вопросы