You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 17:20:25