2017-01-29 4 views
-2

Я только начал свое путешествие с MVC, но у меня проблема, и в течение двух дней я не могу найти ответ. У меня есть EditorFor и ListBoxFor на одном сайте, и я хочу публиковать информацию от EditorFor о имени и от ListBoxFor о EmployeeId.MVC, ListBoxFor делает EditorFor empty

В списокbox У меня есть список моих сотрудников. Я могу написать имя в редакторе, и я могу выбрать одного из сотрудников из списка.

Все в порядке, но когда я отмечаю что-либо внутри ListBox, он делает этот текст внутри EditorFor исчезающим.

Вид:

@model Models.CreateClient 

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

    <div class="col-md-6"> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div class="form-group"> 
      @Html.LabelFor(model => model.SelectedEmployee, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.ListBoxFor(model => model.SelectedtEmployee, Model.EmployeeListItem(), new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.SelectedEmployee, "", new { @class = "text-danger" }) 
      </div> 
     </div> 
    </div> 

    <div class="form-group col-md-6"> 
      <input type="submit" value="CreateNew" class="btn btn-default " /> 
      @Html.ActionLink("Back to List", "Index") 
     </div> 
</div> 
} 

Модель:

public class CreateClient 
{ 
    public Client Client { get; set; } 
    public List<Employee> Employees { get; set; } 
    public IEnumerable<int> SelectedtEmployee { get; set; } 
    public IEnumerable<SelectListItem> EmployeeListItem() 
    { 
     List<SelectListItem> employeeSelectedListItem = new List<SelectListItem>(); 
     foreach (var employee in Employees) 
     { 
      SelectListItem selectListItem = new SelectListItem() 
      { 
       Text = employee.FullName, 
       Value = employee.Id.ToString(), 
      }; 
      employeeSelectedListItem.Add(selectListItem); 
     } 
     return employeeSelectedListItem; 
    } 
} 

Контроллер:

public ActionResult CreateNew() 
    { 
     CreateClient createClient = new CreateClient(); 
     createClient.Employees = db.EmployeeContet.ToList(); 

     return View(createClient); 
    } 
+0

Невозможно на основе кода, который вы указали. Но 'ListBoxFor()' предназначен для выбора нескольких параметров (а свойство 'SelectedtEmployee' должно быть' IEnumerable'), но ваш вопрос предполагает, что вы хотите выбрать только одного сотрудника. И тот факт, что у вас есть связанные «LabelFor()» и «ValidationMessageFor», которые для свойства 'Client.EmployeeId' (не' SelectedtEmployee') не имеет смысла ни –

+0

Я могу предположить, что вы имеете в виду, что вы вводите имя и Когда вы отправляете форму, вы возвращаете представление, и введенный текст больше не отображается. Вам нужно показать модель и код контроллера для этого представления. –

+0

Вам также нужно показать метод POST (и в качестве примечания стороны удалить «Selected = employee.IsEmployeeSelected», который абсолютно ничего не делает - это значение свойства, которое ваша привязка к которому определяет то, что выбрано. И наличие класса 'Employee', у которого есть свойство' IsEmployeeSelected', не имеет смысла) –

ответ

-1

Я сделал ошибку, и имя моего клиента было Int (вместо строки).

+0

Это не объясняет описанную вами проблему. И поскольку это бесполезно для кого-либо еще, я предлагаю вам просто удалить ответ и вопрос –

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