2017-02-16 2 views
-3

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

Вот мой Служащий модель класса

Как проверить имя уже имеющееся

[Table("tblEmployee")] 
public class Employee 
{ 

    public int EmployeeID { get; set; } 
    [Required(ErrorMessage ="Name Cannot Be Empty")] 
    public string Name { get; set; } 

    [Required(ErrorMessage = "Name Cannot Be Empty")] 
    public string Gender { get; set; } 
    [Required(ErrorMessage = "Name Cannot Be Empty")] 
    public string City { get; set; } 
} 



Ниже приведен метод создания В EmployeeController

[HttpPost] 
    public ActionResult Create(Employee employee) 
    { 
     if (ModelState.IsValid) 
     { 
      if (employee.Name!=employee.Name) 
      { 
       db.Employees.Add(employee); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
      else 
      { 
       ViewBag.errorMessage = "Name Already Available"; 
       return (ViewBag.errorMessage); 
      }   

     } 
     else 
     { 
      return View("Create"); 
     } 
    } 



Ниже приведен Create.cshtml

@model Practise.Models.Employee 

@{ 
    ViewBag.Title = "Create"; 
} 
<h2>Create</h2> 

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 
    <div class="form-horizontal"> 
    <h4>Employee</h4> 
    <hr /> 
    @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
    <div class="form-group"> 
     @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) 

     <div class="col-md-10"> 
      @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) 
     </div> 

     @ViewBag.errorMessage 
    </div> 

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

    <div class="form-group"> 
     @Html.LabelFor(model => model.City, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.EditorFor(model => model.City, new { htmlAttributes = new { @class = "form-control" } }) 
      @Html.ValidationMessageFor(model => model.City, "", new { @class = "text-danger" }) 
     </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> 

}

+0

'employee.Name! = Employee.Name' почему не мое имя равно мое имя? –

+1

В действии 'POST' вы должны добавить код строки, чтобы все сотрудники нашли их с помощью' employee.Name'. Если результат «null», вы можете добавить его в таблицу. Кроме того, как сказал @ TânNguyễn, «employee.Name! = Employee.Name», вероятно, самая бесполезная вещь, которую нужно делать, обратите внимание –

+2

Большинство работодателей, рано или поздно, поймут, что многие люди в реальном мире могут иметь одинаковые имена , Использование имени сотрудника как уникального ключа обычно не работает (сотрудники склонны жаловаться, если вы вынуждаете их менять свои имена). Кроме того, вам нужно подумать о том, что произойдет, если два человека представят в одно и то же время. Они оба подчиняются. Обе проверки проходят. Создаются новые записи. О, Боже! По крайней мере *, вы должны обеспечить уникальность на уровне базы данных, и вам нужно написать код, чтобы справиться с нарушением уникальности. –

ответ

0

Ваш создать метод должен выглядеть

if (ModelState.IsValid) 
{ 
    // Check if employee with the same name already exists 
    var existingEmployee = db.Employees.FirstOrDefault(e => e.Name == employee.Name); 

    // No 
    if (existingEmployee == null) 
    { 
     db.Employees.Add(employee); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    // Yes 
    else 
    { 
     ViewBag.errorMessage = "Name not available"; 
     return (ViewBag.errorMessage); 
     }   
} 
+0

Спасибо, что это сработало – CrossWords

0

Эта строка кода не имеет смысла:

employee.Name!=employee.Name 

Вы пытаетесь сравнить точное имя же сотрудников с самим собой.

Вместо этого, вы должны искать db.Employees по имени, что-то вроде:

var doesEployeeExist = db.Employees.Any(e => e.Name == employee.Name); 

если «doesEployeeExist» является ложным, вы знаете имя не используется, и вы можете создать новый.

Однако вы должны знать, что люди могут иметь одинаковые имена (сначала &), особенно по мере роста компании.

0

Попробуйте использовать Any() в Linq. Как это:

// This will check if there is an existing name in your database 
bool IsEmployeeExist = db.Employees.Any(e => e.Name.Equals(employee.Name)); 

if(IsEmployeeExist){ 
    // Show Error Message 
} else { 
    // Do insert... 
} 

Хотя я думаю, что проверка Имя сотрудника является слишком общим, как там будет много людей, которые могли бы иметь такое же имя.

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