2017-03-24 1 views
0

Ich erstelle ein Registrierungsformular, gibt es ein Feld namens Geschlecht in Dropdown-Liste. wenn ich Männchen oder Weibchen aus dem Geschlecht wähle immer null der Wert der Dropdown-Liste wird und eine Validierungsmeldung zurückgeben „männlich oder weiblich ist für das Feld nicht gültig“Warum ist der Dropdown-Wert immer Null in der Datenbank MVZ Rasierapparat

Controller

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Create([Bind(Include = "ID, FirstName,DOB,Gender")] AgentMaster agentMaster) 
    { 
     if (string.IsNullOrEmpty(Convert.ToString(agentMaster.Gender))) 
     { 
      ModelState.AddModelError("Gender", "Gender is required"); 
     } 


     if (ModelState.IsValid) 
     { 
      db.AgentMasters.Add(agentMaster); 
      await db.SaveChangesAsync(); 
      return RedirectToAction("Index"); 
     } 

     return View(agentMaster); 
    } 

Ansicht

@model A.Models.AgentMaster 

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

      @Html.DropDownListFor(model => model.Gender, new SelectList(new[] { "Male", "Female" }),"--select--") 
      @Html.ValidationMessageFor(model => model.Gender, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

in Modell Geschlecht gegeben als

public Nullable<short> Gender { get; set; } 

, wenn ich den Code uns debuggen In Breakpoints ist das Vale für Gender in [httppost] null, aber mit 1 oder 0 funktioniert es. Daher verwende ich die Validierung im Controller, um in eine Zeichenfolge zu konvertieren, aber es funktioniert nicht. Ich komme nicht dahin, wo ich mich ändern muss. Kann mir bitte jemand helfen Lösung zu finden ??

Antwort

0

Ihre Erzeugung eines <select> die Beiträge ein Back string (entweder "Male" oder "Female", die zu einem short gebunden werden können.

Ändern Sie die Eigenschaft auf string, oder wenn Sie short wollen, dann müssen Sie eine IEnumerable<SelectListItem> erzeugen, den entsprechend Value, zum Beispiel hat

new List<SelectListItem>() 
{ 
    new SelectListItem() { Value = "0", Text = "Male" }, 
    new SelectListItem() { Value = "1", Text = "Female" } 
}; 

jedoch Speicher ein Gender als numerischer Wert keinen Sinn macht, und die prop Es sollte eine Zeichenfolge oder ein Enum sein.

+0

Ich habe das als richtig, aber der Wert wird nicht in den Details angezeigt, löschen und Indexseite ?? – user256

+0

Ich habe keine Ahnung, was Ihr Code in diesen Methoden ist (und ich weiß nicht einmal, welche der oben genannten Optionen Sie gewählt haben) Ich nehme an, Sie wählten die richtige, die eine Zeichenfolge ist so nicht sicher, was Ihr Problem ist. –

+0

Ich habe unter Verwendung von Text und Wert geschrieben, der Wert 0 oder 1 wird in die Datenbank eingegeben, wird aber auf der Indexseite angezeigt (Indexaktionsmethode) – user256