2014-01-24 2 views
1

У меня странная ошибка. Я создал базу данных с помощью SQL Server Management Studio. Все первичные ключи, внешние ключи, уникальный набор и работа.ASP.NET MVC Сгенерированные представления не работают должным образом

Я импортировал базу данных в MVC проект и генерируемые модели, контроллеры и представления все как стоит в этом руководстве: click

Но по неизвестной причине встраивать проверки работают только для внешних ключей! Несмотря на то, что все другие правила проверки были подкреплены Visual Studio.

Не знаю, какой код я должен предоставить, поэтому, пожалуйста, свяжитесь с нами, и я обновлю свой вопрос.

например: Создание пользователя:

@model magazyn.Models.User 

@{ 
    ViewBag.Title = "Create"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>Create</h2> 


@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 

<div class="form-horizontal"> 
    <h4>User</h4> 
    <hr /> 
    @Html.ValidationSummary(true) 

    <div class="form-group"> 
     @Html.LabelFor(model => model.EmployeeNo, new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.EmployeeNo) 
      @Html.ValidationMessageFor(model => model.EmployeeNo) 
     </div> 
    </div> 

    <div class="form-group"> 
     @Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.Name) 
      @Html.ValidationMessageFor(model => model.Name) 
     </div> 
    </div> 

    <div class="form-group"> 
     @Html.LabelFor(model => model.Surname, new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.Surname) 
      @Html.ValidationMessageFor(model => model.Surname) 
     </div> 
    </div> 

    <div class="form-group"> 
     @Html.LabelFor(model => model.ContactInfo, new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.ContactInfo) 
      @Html.ValidationMessageFor(model => model.ContactInfo) 
     </div> 
    </div> 

    <div class="form-group"> 
     @Html.LabelFor(model => model.RoleId, "RoleId", new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownList("RoleId", String.Empty) 
      @Html.ValidationMessageFor(model => model.RoleId) 
     </div> 
    </div> 

    <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input type="submit" value="Create" class="btn btn-default" /> 
     </div> 
    </div> 
</div> 
} 

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

Контроллер:

 public ActionResult Create() 
    { 
     ViewBag.RoleId = new SelectList(db.Roles, "Id", "RoleName"); 
     return View(); 
    } 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    [UserEditAuth] 
    public ActionResult Create([Bind(Include="Id,EmployeeNo,Name,Surname,ContactInfo,RoleId")] User user) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Users.Add(user); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 
     ViewBag.RoleId = new SelectList(db.Roles, "Id", "RoleName", user.RoleId); 
     return View(user); 
    } 

и пользователь субъект (сгенерированный entityFramework):

public partial class User 
{ 
    public User() 
    { 
     this.DeviceUsages = new HashSet<DeviceUsage>(); 
    } 

    public int Id { get; set; } 
    public string EmployeeNo { get; set; } 
    public string Name { get; set; } 
    public string Surname { get; set; } 
    public string ContactInfo { get; set; } 
    public int RoleId { get; set; } 

    public virtual ICollection<DeviceUsage> DeviceUsages { get; set; } 
    public virtual Role Role { get; set; } 
} 

В этом случае только роль подтверждается, потому что это иностранный ключ из другой таблицы

+0

Помогла бы иметь исходный код для одного из видов (т. Е. Create view), действия контроллера и одного из объектов ... – eiximenis

+0

Хорошо. Добавлено представление, действие контроллера и сущность, используемые в этом действии – szpic

ответ

1

Вы используете Database-first aproach для генерации всех моделей. Вы должны удлинить каждый EF генерируемый модель, а затем предоставить metadata аннотировать каждое свойство по мере необходимости, MaxLength и т.д. Вы должны посмотреть здесь:

+0

Это так странно для меня. Почему мне нужно добавлять ограничения в DB, ​​например, не null, если мне нужно сделать это снова в коде ... – szpic

+0

Проверка валидации работает вместе с атрибутами вашей модели. Поскольку вы не предоставили все, что вам нужно, Model.IsValid будет работать неправильно, потому что он не знает всего о вашей БД. – Fals

+0

Спасибо. Я думал, что если ET импортирует все, а model.edmx показывает, где будет «не null», все будет сгенерировано. Спасибо еще раз! – szpic

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