2017-01-29 4 views
-2

Ich habe gerade meine Reise mit MVC begonnen, aber ich habe ein Problem und für zwei Tage kann ich keine Antwort finden. Ich habe EditorFor und ListBoxFor in einer einzigen Site und ich möchte Informationen von EditorFor über Name und von ListBoxFor über EmployeeId.MVC, ListBoxFor macht EditorFor leer

In Listbox habe ich eine Liste meiner Mitarbeiter. Ich kann einen Namen im Editor schreiben und ich kann einen der Mitarbeiter aus der Liste auswählen.

Alles ist in Ordnung, aber wenn ich etwas in ListBox markiere, macht es den Text in EditorFor verschwindet.

Ausblick:

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

Modell:

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; 
    } 
} 

Controller:

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

     return View(createClient); 
    } 
+0

Nicht möglich basierend auf dem Code, den Sie angezeigt haben. Aber 'ListBoxFor()' dient zur Auswahl mehrerer Optionen (und Eigenschaft 'SelectedtMployee' muss' IEnumerable' sein), aber Ihre Frage schlägt vor, dass Sie nur einen Mitarbeiter auswählen möchten. Und die Tatsache, dass Sie 'LabelFor()' und 'ValidationMessageFor() zugeordnet haben, die für die Eigenschaft' Client.EmployeeId' (nicht 'SelectedtMemployee') sind, macht keinen Sinn. –

+0

Ich kann nur annehmen, dass Sie meinen, dass Sie einen Namen eingeben, und Wenn Sie das Formular absenden, geben Sie die Ansicht zurück und der von Ihnen eingegebene Text wird nicht mehr angezeigt. Sie müssen das Modell und den Controller-Code für diese Ansicht anzeigen. –

+0

Sie müssen auch die POST-Methode anzeigen (und als eine Randnotiz, löschen Sie 'Selected = employee.IsEmployeeSelected'- die absolut nichts tut - es ist der Wert der Eigenschaft, an die Ihre Bindung bestimmt, was ausgewählt ist. Und eine Klasse haben 'Mitarbeiter', der eine Eigenschaft' IsEmployeeSelected' hat, macht keinen Sinn) –

Antwort

-1

Ich habe Fehler gemacht und der Name meines Auftraggeber war int (statt string).

+0

Das erklärt das beschriebene Problem nicht. Und da dies für niemanden von Nutzen ist, schlage ich vor, dass Sie nur die Antwort und die Frage löschen –

Verwandte Themen