ASP.NET Core MVC表单input text无法传递值至控制器的问题
ASP.NET Core MVC视图向控制器传递参数问题解决
问题场景
需要从视图向控制器方法传递3个参数:
- int idUsuario:可正常接收
- string respuesta1:调试显示为null
- string respuesta2:调试显示为null
其中idUsuario通过asp-for属性传递正常,respuesta1和respuesta2不想通过asp-for绑定模型属性(避免渲染到视图),仅需获取用户输入值传递给控制器分析。
现有代码
控制器方法
public IActionResult ValidarRespuestas(int idUsuario, string pregunta1, string pregunta2) { return View(); }
视图代码
<div class="col-lg-7"> <form asp-action="ValidarRespuestas"> <div class="form-group"> @if (Model.Pregunta1 == "1") { <label class="form-control-label">¿Cuál es su sobrenombre de la infancia?</label> } else if (Model.Pregunta1 == "2") { <label class="form-control-label">¿Cuál es el nombre de su primera mascota?</label> } else { <label class="form-control-label">¿Cuál es el nombre de la primera escuela donde estudió?</label> } <input type="text" id="respuesta1" name="respuesta1" runat="server" class="form-control" placeholder="Ingrese la respuesta a la pregunta 1"> </div><!-- form-group --> <div class="form-group"> @if (Model.Pregunta2 == "1") { <label class="form-control-label">¿Cuál es su sobrenombre de la infancia?</label> } else if (Model.Pregunta2 == "2") { <label class="form-control-label">¿Cuál es el nombre de su primera mascota?</label> } else { <label class="form-control-label">¿Cuál es el nombre de la primera escuela donde estudió?</label> } <input type="text" id="respuesta2" name="respuesta2" runat="server" class="form-control" placeholder="Ingrese la respuesta a la pregunta 2"> <input type="hidden" asp-for="IdUsuario" /> </div><!-- form-group --> <div class="form-group mg-b-20"><a href="@Url.Action("Index","Autenticacion")">Regresar al inicio de sesión</a></div> <input type="submit" value="Continuar" class="btn btn-block" /> </form> </div><!-- col-7 -->
问题原因
控制器方法的参数名是pregunta1和pregunta2,但视图中输入框的name属性是respuesta1和respuesta2,两者名称不匹配,导致模型绑定无法将输入值映射到控制器参数,所以接收为null。另外,视图中输入框的runat="server"是ASP.NET WebForms的属性,在ASP.NET Core中无作用,建议移除。
解决方法
方法一:修改控制器参数名,与输入框name一致
将控制器方法的参数名改为和输入框name对应的respuesta1、respuesta2:
public IActionResult ValidarRespuestas(int idUsuario, string respuesta1, string respuesta2) { // 此处添加参数处理逻辑 return View(); }
方法二:修改输入框name属性,与控制器参数名一致
如果不想修改控制器参数名,将视图中输入框的name属性改为pregunta1、pregunta2,同时移除无用的runat="server":
<!-- 修改第一个输入框 --> <input type="text" id="respuesta1" name="pregunta1" class="form-control" placeholder="Ingrese la respuesta a la pregunta 1"> <!-- 修改第二个输入框 --> <input type="text" id="respuesta2" name="pregunta2" class="form-control" placeholder="Ingrese la respuesta a la pregunta 2">
两种方法任选其一,即可让控制器正常接收全部三个参数。
内容的提问来源于stack exchange,提问作者iscott16
相关产品推荐
相关产品推荐

