Beste Tweakers,
Deze vraag gaat over een stukje asp.net core en javascript code.
Het stukje software waarover het gaat heeft als doel een life event (bijv. geboorte, begrafenis etc.) aan een persoon te koppelen.
Het lifeEvent wordt aangemaakt waarbij het gekoppeld wordt aan een persoon. De persoon krijgt hierbij een rol. Bijvoorbeeld bij een geboorte de rol vader.
Voor het aanmaken van de lifeEvent is er een view pagina met invoer voor algemene lifeEvent gegevens. Daarnaast wordt op deze pagina het type lifeEvent gekozen en op basis hiervan wordt een bijbehorende partial in de pagina geladen.
Dit maakt het mogelijk om per lifeEvent specifieke informatie toe te voegen. In een andere partial op de pagina worden de rollen geladen.
Het ophalen van de partials en selecteren van de rollen werkt. De software werkt echter niet wanneer je op save drukt. Er wordt dan een HTTP500 fout gegeven.
Na veel debuggen zijn we er nog niet uit wat de oorzaak is. Waar we tegenaanlopen is dat je bij het debuggen "verzuipt" in de informatie die in de javascript is toegekend aan het formData model.
Ziet iemand wat er fout gaat of heeft suggesties?
Hieronder is de relevante code gegeven. Wanneer op de save knop gedrukt wordt wordt een javascript functie aangeroepen. Deze functie zorgt ervoor dat de gegevens van het lifeEvent, de specifieke lifeEvent gegevens (afhankelijk van het type lifeEvent) en de rol worden samengevoegd. Bij het debuggen is ook naar voren gekomen dat de functie wordt aangeroepen. Er wordt ook gekozen informatie meegegeven (niet kunnen verifiëren of dit compleet is).
Hierna moet de functie in de controller worden aangeroepen en de data worden meegegeven.
Ergens in het javascript model lijkt het fout te gaan. Bij het debuggen wordt de functie in de controller niet aangeroepen.
T.b.v. leesbaarheid is de controller code en view code niet in zijn geheel gegeven.
View LifeEvent
Javascript code
Controller code
Deze vraag gaat over een stukje asp.net core en javascript code.
Het stukje software waarover het gaat heeft als doel een life event (bijv. geboorte, begrafenis etc.) aan een persoon te koppelen.
Het lifeEvent wordt aangemaakt waarbij het gekoppeld wordt aan een persoon. De persoon krijgt hierbij een rol. Bijvoorbeeld bij een geboorte de rol vader.
Voor het aanmaken van de lifeEvent is er een view pagina met invoer voor algemene lifeEvent gegevens. Daarnaast wordt op deze pagina het type lifeEvent gekozen en op basis hiervan wordt een bijbehorende partial in de pagina geladen.
Dit maakt het mogelijk om per lifeEvent specifieke informatie toe te voegen. In een andere partial op de pagina worden de rollen geladen.
Het ophalen van de partials en selecteren van de rollen werkt. De software werkt echter niet wanneer je op save drukt. Er wordt dan een HTTP500 fout gegeven.
Na veel debuggen zijn we er nog niet uit wat de oorzaak is. Waar we tegenaanlopen is dat je bij het debuggen "verzuipt" in de informatie die in de javascript is toegekend aan het formData model.
Ziet iemand wat er fout gaat of heeft suggesties?
Hieronder is de relevante code gegeven. Wanneer op de save knop gedrukt wordt wordt een javascript functie aangeroepen. Deze functie zorgt ervoor dat de gegevens van het lifeEvent, de specifieke lifeEvent gegevens (afhankelijk van het type lifeEvent) en de rol worden samengevoegd. Bij het debuggen is ook naar voren gekomen dat de functie wordt aangeroepen. Er wordt ook gekozen informatie meegegeven (niet kunnen verifiëren of dit compleet is).
Hierna moet de functie in de controller worden aangeroepen en de data worden meegegeven.
Ergens in het javascript model lijkt het fout te gaan. Bij het debuggen wordt de functie in de controller niet aangeroepen.
T.b.v. leesbaarheid is de controller code en view code niet in zijn geheel gegeven.
View LifeEvent
ASP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| @using Models.Enums @model Models.View.LifeEvent <form asp-action="Edit"> <div class="card"> <div class="card-header"> <div class="d-flex flex-column align-items-center text-center"> <h4>Event details</h4> </div> </div> CODE WEGGELATEN VOOR DE LEESBAARHEID. <div class="card-footer"> <div class="form-group"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button> <button type="submit" id="submit" class="btn btn-success" value="Finished">Save</button> </div> </div> </div> </form> |
Javascript code
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| loadedObj.find("*.EventLoader").each(function (index, value) { var obj = $(this); var selector = obj.find(".EventSelector"); var details = obj.find(".EventDetails"); var id = obj.find("#LifeEventId").val(); $("#submit").click(function (e) { e.preventDefault(); //console.log($('form')); var form = $(this).parents('form:first')[0]; //console.log(form); //var form = $('form')[0]; var formData = new FormData(form); $(".Roles").find("*.SomeRole").each(function (index, value) { var role = $(value); var roleSelect = role.find(".RoleTypes"); var e = roleSelect.find("option:selected"); var personId = role.find(".SearchDropdownEvents").attr("data-selected"); formData.append("Roles[" + index + "].RoleType", e.val()); formData.append("Roles[" + index + "].Person.PersonId", personId); }); $.ajax({ method: 'post', url: "/Events/Edit", data: formData, processData: false, contentType: false, success: function () { location.reload(); }, error: function (response) { alert("Error code: " + response.status); } }); }); selector.on('change', function () { var selectedValue = this.value; LoadDetails(selectedValue); UpdateRoles(); }); |
Controller code
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| [HttpPost] public async Task<IActionResult> Edit( Models.View.LifeEvent modelEvent, Models.View.Events.Birth modelBirth, Models.View.Events.Death modelDeath) { CODE WEG GELATEN T.B.V LEESBAARHEID } await _context.SaveChangesAsync(); //return Redirect(Request.Headers["Referer"].ToString()); return Ok(); } return NotFound(); } |