Estoy tratando de pasar el elemento de entrada al método OnPost en mi proyecto Razor Pages, pero nunca se toma el método.
este es mi formulario
<p style="text-align: left; font-size: 12px;">Podstawowe dane</p>
<p><input type="text" class="form-control" placeholder="Imię" name="name" /></p>
<p> <input type="text" class="form-control" placeholder="Nazwisko" name="surname" /></p>
<p><input type="text" class="form-control" placeholder="Telefon" name="mobile" /></p>
<button type="submit" class="" style="" asp-page-handler="UpdatePersonalData">Dalej</button>
<input id="btnWork" type="submit" value="Work" onclick="writeLog(name,surname,mobile);" />
Esta es mi función:
<script>
function writeLog(name, surname, mobile) {
fetch(`?handler=UpdatePersonalData&name=${name}&surname=${surname}&mobile=${mobile}`);
}
</script>
Esta es mi función modelo:
}
public async Task<IActionResult> OnPostUpdatePersonalData(string name, string surname, string mobile)
{
var user = await UserManager.GetUserAsync(User);
_AccountModel.UserId = user.Id;
_AccountModel.Mail = user.Email;
await _accountRepository.UpdatePersonalData(_AccountModel, name, surname, mobile);
return RedirectToPage("/Account/DataForm/CompanyData");
}
si me pudieras ayudar te lo agradeceria
##ACTUALIZAR
Después de la conversación con el usuario en stackoverflow
esto es completo
Al principio pensé que podía hacer múltiples solicitudes de publicación como con un formulario estático, pero por lo que puedo ver, tengo que actualizarlo de una vez.
fetch envía una solicitud GET de forma predeterminada, debe configurarlo para enviar POST. También debe pasar el token antifalsificación.
Prueba esto:
@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Antiforgery
@{
var requestToken = Antiforgery.GetAndStoreTokens(HttpContext).RequestToken;
}
<p style="text-align: left; font-size: 12px;">Podstawowe dane</p>
<p><input id="name" type="text" class="form-control" placeholder="Imię" name="name" /></p>
<p><input id="surname" type="text" class="form-control" placeholder="Nazwisko" name="surname" /></p>
<p><input id="mobile" type="text" class="form-control" placeholder="Telefon" name="mobile" /></p>
<input id="btnWork" type="submit" value="Work" onclick="writeLog()" />
<input id="RequestVerificationToken" type="hidden" value="@requestToken" />
@section Scripts {
<script>
function writeLog() {
const name = document.getElementById('name').value;
const surname = document.getElementById('surname').value;
const mobile = document.getElementById('mobile').value;
const url = `?handler=UpdatePersonalData&name=${name}&surname=${surname}&mobile=${mobile}`;
fetch(url, {
method: 'POST',
headers: {
RequestVerificationToken:
document.getElementById('RequestVerificationToken').value
}
});
}
</script>
}
Puede intentar usar el siguiente código, al hacer clic en el botón Trabajar, la función js writeLog() llamará al controlador OnPostUpdatePersonalData :
ver (al hacer clic <input type="button"/> no se enviará el formulario):
<form method="post" id="myForm">
<p style="text-align: left; font-size: 12px;">Podstawowe dane</p>
<p><input type="text" class="form-control" placeholder="Imię" name="name" /></p>
<p> <input type="text" class="form-control" placeholder="Nazwisko" name="surname" /></p>
<p><input type="text" class="form-control" placeholder="Telefon" name="mobile" /></p>
<button type="submit" class="" style="" asp-page-handler="UpdatePersonalData">Dalej</button>
<input id="btnWork" type="button" value="Work" onclick="writeLog()" />
</form>
js:
function writeLog() {
$.ajax({
type: "POST",
url: "?handler=UpdatePersonalData",
data: $("#myForm").serialize(),
headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },
success: function(data) {
}
});
}
resultado: