2017-01-26 3 views
-1

Ich versuche, die create-Funktion zu erhalten, damit der Benutzer ausgewählte Werte in die Datenbank einträgt. Wenn die Schaltfläche zum Erstellen gedrückt wird, wird kein Fehler ausgegeben, aber die Daten werden nicht aufgefüllt. Ich bin mir ziemlich sicher, dass meine Frequenzfelder das Problem verursachen, aber ich konnte keine Lösung finden.Funktion erstellen, die keine Daten in der Datenbank speichert

Es gibt zwei verschiedene Arten von Frequenzen, die ein Benutzer je nach seiner "Notification Name" -Auswahl auswählen kann. Eine Auswahl enthält 3 separate Felder für einen numerischen Wert, Zeitrahmen (Woche, Monat usw.) und eine Vorher/Nachher-Auswahl. Der andere gibt einfach sofort als statisches Textfeld aus. Unabhängig davon, welche Option gewählt wird, sollten die Häufigkeitsdaten in eine Zelle in der Datenbank eingegeben werden, die dann bei Bedarf mit Hilfe von Rohrleitungen getrennt wird. Ich bin immer noch ziemlich neu in C# MVC, so dass jede Hilfe sehr geschätzt wird.

Controller:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "Id,notificationType1,recipientTypeId,frequency")] NotificationType notificationType) 
    { 
     if (ModelState.IsValid) 
     { 
      db.NotificationType.Add(notificationType); 
      db.SaveChanges(); 
      return RedirectToAction("Create"); 
     } 

     ViewBag.recipientTypeId = new SelectList(db.RecipientType, "Id", "recipientRole", notificationType.recipientTypeId); 
     return View(notificationType); 
    } 

Ansicht

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 

    <div class="form-horizontal"> 

     <hr /> 

     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div class="form-group"> 

      @Html.LabelFor(model => model.notificationType1, "Notification Name", htmlAttributes: new { @class = "control-label col-md-2 helper-format" }) 
      <div class="col-md-10" id="type_selection"> 
       @Html.DropDownList("notificationType1", new List<SelectListItem> { 
      new SelectListItem { Text = "Make a Selection", Value="" }, 
      new SelectListItem { Text = "Incomplete Documents", Value= "Incomplete Documents" }, 
      new SelectListItem { Text = "All Documents Complete", Value = "All Documents Complete" }, 
      new SelectListItem { Text = "Documents Requiring Action", Value = "Documents Requiring Action" } 
        }, new { @class = "helper-format", @id = "value_select", style = "font-family: 'Roboto', Sans Serif;" }) 
       @Html.ValidationMessageFor(model => model.notificationType1, "", new { @class = "text-danger" }) 
      </div> 

     </div> 
     <div class="form-group" id="frequency_group"> 
      @Html.LabelFor(model => model.frequency, "Frequency", htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-sm-3" id="frequency_group"> 
       @Html.TextBoxFor(model => model.frequency, new { @class = "textbox-width", @placeholder = "42" }) 

       @Html.DropDownList("frequency", new List<SelectListItem> 
     { 
      new SelectListItem { Text = "Day(s)", Value= "| Day"}, 
      new SelectListItem { Text = "Week(s)", Value= "| Week"}, 
      new SelectListItem { Text = "Month(s)", Value= "| Month"} 
     }) 

       @Html.DropDownList("frequency", new List<SelectListItem> 
     { 
      new SelectListItem { Text = "Before", Value= "| Before"}, 
      new SelectListItem { Text = "After", Value= "| After"} 
     }) 
      </div> 
      <p class="col-sm-2" id="psdatetext">The Beginning</p> 
     </div> 
     <div class="form-group" id="freq_instant"> 
      @Html.LabelFor(model => model.frequency, "Frequency", htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="instant_text"> 
      <p>Instantaneous</p></div> 

     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.recipientTypeId, "Notification For", htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.DropDownList("recipientTypeId", new List<SelectListItem> 
     { 
      new SelectListItem { Text = "Me", Value= "Me"}, 
      new SelectListItem { Text = "Account Manager", Value="Account Manager" }, 
      new SelectListItem { Text = "Candidate", Value= "Candidate"}, 
      new SelectListItem { Text = "Recruiter", Value="Recruiter" }, 
      new SelectListItem { Text = "Manager", Value= "Manager"} 
     }) 
      </div> 
     </div> 
     <div class="form-group"> 
      <div class="col-md-offset-1 col-md-10"> 
       <div id="hovercreate"> 
        <button type="submit" value="CREATE" class="btn btn-primary" id="createbtn">CREATE</button> 
       </div> 

      </div> 

     </div> 
    </div> 
} 

JS für Frequenzoptionen

@Scripts.Render("~/bundles/jquery") 
<script type="text/javascript"> 
$(document).ready(function() { 
    $('#frequency_group').hide() 
    $('#freq_instant').hide() 

    $('#value_select').change(function() { 
     var selection = $('#value_select').val(); 
     $('#frequency_group').hide(); 
     switch (selection) { 
      case 'Incomplete Documents': 
       $('#frequency_group').show(); 
       break; 
      case 'All Documents Complete': 
       $('#frequency_group').show(); 
       break; 
     } 
    }); 

    $('#value_select').on('change', function() { 
     if (this.value == 'Documents Requiring Action') { 
      $("#freq_instant").show(); 
     } 
     else { 
      $("#freq_instant").hide(); 
     } 
    }); 

}); 

+0

Ist das mit Entity Framework-Code zuerst? Wenn ja, warum überprüfen Sie nicht die SQL, die ausgegeben wird? Fügen Sie einen Logger zu ctx.Database.Log hinzu, schreiben Sie vielleicht in die Trace-Ausgabe. –

+0

Beobachten Sie Ihre HTTP-Anfragen mit den Netzwerkwerkzeugen Ihres Browsers. Ist das Formular POSTing an die richtige URL? – mason

+1

Setzen Sie einen Unterbrechungspunkt, debuggen Sie und finden Sie heraus, wenn es einen Fehler in den Daten gibt, die Sie senden. – Dhanashree

Antwort

1

Haben Sie einen Breakpoint auf die Methode gesetzt? Und wenn ja, löst es aus?

Wenn nicht, versuchen Sie diese ...

Von dem, was ich mich erinnere, alle Controller hat einen Standardparameter-ID, die in der RouteConfig.cs Datei (App_Start/RouteConfig.cs) gesetzt.

Es gibt ein paar Wege von dort zu gehen. 1. Steuerung den ID-Parameter geben (zB (int ID)) 2. Stellen Sie den Weg Wert über die Strecke

führen dies Sie tun müssen, - A. Fügen Sie im Anschluss an die an der Spitze Ihres RouteConfig .cs/RegisterRoutes-Methode.

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");     
    routes.MapMvcAttributeRoutes(); 
    //... 
} 

B. hinzufügen

[ValidateAntiForgeryToken] 
[Route(@"Create/")] 
public ActionResult Create([Bind(Include = ... 
{ 

Ich würde auch vorschlagen, einen Pause-Punkt am Anfang des Verfahrens setzen, um zu sehen, ob sein es schlagen.

http://www.tutorialsteacher.com/mvc/routing-in-mvc https://msdn.microsoft.com/en-us/library/system.web.mvc.routecollectionattributeroutingextensions.mapmvcattributeroutes%28v=vs.118%29.aspx

1

ist die ID-Schlüssel manuell zugewiesen? Wenn nicht (wenn es zum Beispiel ein IDENTITY-Feld ist), sollten Sie es nicht binden - entfernen Sie die ID aus [Bind (Include = "...")].

Verwandte Themen