2017-09-06 1 views
0

Ich habe ein Problem über Linq. Ich habe ein Formular mit allen erforderlichen Feldern (Holiday) und ein anderes Modell (Profil), wieder mit allen erforderlichen Feldern.Linq gibt Nullwerte zurück

Ich versuche, von einem Urlaubsantragformular einige der Holiday-Eigenschaften abzutrennen, die automatisch mit einigen der Profileigenschaften aus der Datenbank gefüllt werden.

[Table("AspNetHoliday1")] 
public class HolidayViewModel 
{ 
    [Required] 
    [Key] 
    public int Id { get; set; } 

    [Required] 
    [MaxLength(50)] 
    public string FirstName { get; set; } 

    [Required] 
    [MaxLength(50)] 
    public string LastName { get; set; } 

    [Required] 
    [EmailAddress] 
    public string Email { get; set; } 

    [Required] 
    [MaxLength(50)] 
    public string TeamLeaderName { get; set; } 

    [Required] 
    public DateTime StartDate { get; set; } 

    [Required] 
    public DateTime EndDate { get; set; } 

    [Required] 
    [Range(1, 21)] 
    public int DaysOff { get; set; } 

    [Required] 
    [EmailAddress] 
    public string TLEmail { get; set; } 

    [Required] 
    public bool Flag { get; set; }  

} 

Und das ist mein Profil Modell:

[Table("AspNetProfile1")] 
public class ProfileViewModel 
{ 
    [Required] 
    public int Id { get; set; } 

    [Required] 
    [MaxLength(50)] 
    public string UserName { get; set; } 

    [Required] 
    [MaxLength(50)] 
    public string FirstName { get; set; } 

    [Required] 
    [MaxLength(50)] 
    public string LastName { get; set; } 

    [EmailAddress] 
    public string Email { get; set; } 

    [Required] 
    public int Mark { get; set; } 

    [Required] 
    [StringLength(13)] 
    public string CNP { get; set; } 

    [Required] 
    [MaxLength(50)] 
    public string Location { get; set; } 

    [Required] 
    [MaxLength(50)] 
    public string Team { get; set; } 

    [Required] 
    [EmailAddress] 
    public string TeamLeaderEmail { get; set; } 
} 

Was ich versuche zu tun, um eine Form zu haben, wie folgt aus:

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

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

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

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

Und im Holiday Controller dies zu tun:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "Id,FirstName,LastName,Email,TeamLeaderName,StartDate,EndDate,DaysOff,TLEmail,Flag")] HolidayViewModel holidayViewModel) 
    { 


     if (ModelState.IsValid) 
     { 
      var firstName = (from b in db.ProfileViewModel 
          where b.UserName.Equals(User.Identity.Name) 
          select b.FirstName).Single(); 
      holidayViewModel.FirstName = firstName; 
      var lastName = (from b in db.ProfileViewModel 
          where b.UserName.Equals(User.Identity.Name) 
          select b.LastName).Single(); 
      holidayViewModel.LastName = lastName; 
      var email = (from b in db.ProfileViewModel 
         where b.UserName.Equals(User.Identity.Name) 
         select b.Email).Single(); 
      holidayViewModel.Email = email; 
      var tlEmail = (from b in db.ProfileViewModel 
          where b.UserName.Equals(User.Identity.Name) 
          select b.TeamLeaderEmail).Single(); 
      holidayViewModel.TLEmail = tlEmail; 

      holidayViewModel.Flag = false; 

      holidayViewModel.TeamLeaderName = Request.Form["TeamLeaderName"]; 
      holidayViewModel.StartDate = Convert.ToDateTime(Request.Form["StartDate"]); 
      holidayViewModel.EndDate = Convert.ToDateTime(Request.Form["EndDate"]); 
      holidayViewModel.DaysOff = Convert.ToInt32(Request.Form["DaysOff"]); 
      db.AspNetHolidays.Add(holidayViewModel); 
      db.SaveChanges(); 
      return RedirectToAction("SuccessHoliday", "Success"); 
     } 

     return View(holidayViewModel); 
    } 

Irgendwie geben alle vars null zurück, auch wenn sie einen Wert zurückgeben sollten, da die Werte in der Tabelle Profile existieren.

Können Sie mir bitte sagen, was ich falsch mache? Ich habe einen Fehler von Sysem.Web.Mvc.ModelError, ErrorMessage: "The FirstName field is required" and its value is set to null. kommenden

+3

Haben Sie versucht, zu debuggen? Erhalten Sie einen Fehler? Es wäre besser, das spezifische Problem mit einem kleinen Beispiel und nicht mit dem Code, mit dem Sie arbeiten, zu versehen. – Airborne

+0

Hallo, ich habe versucht, zu debuggen. Ich setze einen Haltepunkt in die if-Anweisung und auch für jede Variable im Controller. Es gibt mir den Fehler: ModelState.IsValid = false –

+1

Können Sie den minimalen Code bereitstellen, der erforderlich ist, um das Problem zu reproduzieren? Die von Ihnen bereitgestellte Codewand ist schwer zu lesen. Und diese Fehlermeldung sollte in der Frage bearbeitet werden. –

Antwort

-2

haben Sie versucht FirstOrDefault()

+0

Wo schlagen Sie vor, dass das OP diese Zeile hinzufügen sollte? Wie wird das das Problem lösen? Können Sie Ihrer Antwort noch weitere Details und Erklärungen hinzufügen? –

+0

Ich habe versucht FirstOrDefault() und auch Single() –

+0

Dies ist nicht das Problem, Single() würde eine Ausnahme auslösen, wenn das Ergebnis null war. –

0

ModelState.IsValid falsch zurückkehrt, weil das Modell Sie in die Aktion vorbei hat leere Werte für Vornamen, Nachnamen, etc., aber sie sind wie erforderlich markiert.

Erstellen Sie ein separates Ansichtsmodell, das nur die Eigenschaften enthält, die Sie in das Formular einschließen möchten, und ordnen Sie diese Werte in der Postaktion HolidayViewModel zu.

Verwandte Themen