Tengo un campo oculto en mi vista y estoy tratando de agregarle un valor en la función de JavaScript validateForm(). Veo que el valor se está cambiando en la ventana de salida. Sin embargo, el modelo que se pasa al controlador como parámetro lo recibe como nulo.
Aquí está el código que he probado
Cshtml:
@using (Html.BeginForm("ViewAch", "AchNew", FormMethod.Post, new { enctype = "multipart/form-data", id = "CreateACHForm", onsubmit = "validateForm()" })) { <label>First Name <span>*</span></label> @Html.TextBoxFor(m => m.FirstName, new { maxlength = 19, @class = "input-required form-control form-control-sm", id = "fname" }) @Html.ValidationMessageFor(m => m.FirstName, "") <label>First Name <span>*</span></label> @Html.TextBoxFor(m => m.FirstName, new { maxlength = 19, @class = "input-required form-control form-control-sm", id = "fname" }) @Html.ValidationMessageFor(m => m.FirstName, "") @Html.AntiForgeryToken(); @Html.HiddenFor(m => m.TokenizedPayloadNonce); <input type="submit" value="SignUp" class="btn btn-primary btn-lg btn-block" /> }JavaScript:
function validateForm() { var NewToken = callExternalSytem(); // retrieving value from the external system document.getElementById('TokenizedPayloadNonce').value = NewToken; }Así es como lo estoy leyendo desde el controlador:
[HttpPost] [ValidateAntiForgeryToken] public ActionResult ViewAch(AchProfile achProfile) { var token = achProfile.TokenizedPayloadNonce; }Puedo acceder a los otros valores de campo, pero no a los que actualicé en validateForm(). ¿Hay algo que me estoy perdiendo?
Con respecto a su caso, puede usar este método para enviar el valor actualizado a su Controller :
Primero cambiamos el tipo de su SignUp de submit a button y vinculamos el formulario de validateForm a su evento onclick :
@using (Html.BeginForm("ViewAch", "AchNew", FormMethod.Post, new { enctype = "multipart/form-data", id = "CreateACHForm"})) { <label>First Name <span>*</span></label> @Html.TextBoxFor(m => m.FirstName, new { maxlength = 19, @class = "input-required form-control form-control-sm", id = "fname" }) @Html.ValidationMessageFor(m => m.FirstName, "") <label>First Name <span>*</span></label> @Html.TextBoxFor(m => m.FirstName, new { maxlength = 19, @class = "input-required form-control form-control-sm", id = "fname" }) @Html.ValidationMessageFor(m => m.FirstName, "") @Html.AntiForgeryToken(); <input type="hidden" id="myTokenizedPayloadNonce" name="TokenizedPayloadNonce"/> <input type="button" value="SignUp" class="btn btn-primary btn-lg btn-block" onclick="validateForm()" /> } Una vez que se realiza el enlace, usamos Javascript para enviar su formulario al Controller . Esto vinculará el valor actualizado que requirió a su Model :
function validateForm() { var NewToken = callExternalSytem(); // retrieving value from the external system document.getElementById('myTokenizedPayloadNonce').value = NewToken; document.getElementById('CreateACHForm').submit(); }