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

MVC中从输入框传数据到控制器报错求助

问题分析与解决方案

你的问题核心在于混淆了服务器端代码和客户端代码的执行时机,导致视图里的name变量报错,下面详细解释并给出可行方案:

为什么会报错?

你写的@Url.Action("Wynik", "Home", new { name = name })是服务器端代码,它在页面被发送到浏览器之前就执行了。这时候用户还没在输入框里输入任何内容,服务器根本不知道你说的第二个name是什么——这个变量在服务器端没有定义,自然会抛出错误。

服务器端代码无法直接获取客户端输入框的实时值,必须通过客户端交互(比如表单提交、JavaScript)来传递数据。

解决方案1:使用表单提交(推荐,符合MVC规范)

这是最标准的方式,把输入框和按钮放在表单里,让浏览器自动处理数据传递:

<form action="@Url.Action("Wynik", "Home")" method="get">
    <!-- 注意:输入框的name属性要和控制器方法的参数名一致(这里是name) -->
    <input type="text" id="wprowadz" name="name"/>
    <input type="submit" value="Create" />
</form>

原理:

点击提交按钮时,浏览器会把表单里所有带name属性的元素的值,按照表单指定的action地址发送到控制器。因为输入框的name是name,和控制器方法的参数string name完全匹配,ASP.NET MVC会自动把值绑定到参数上。

如果不想修改输入框的name(比如保留imie),可以修改控制器方法的参数名,或者用特性指定参数来源:

// 修改参数名和输入框name一致
public string Wynik(string imie) { 
    return imie; 
}

// 或者用特性映射
public string Wynik([FromQuery(Name = "imie")] string name) { 
    return name; 
}

解决方案2:用JavaScript动态生成跳转URL

如果你坚持要用按钮的onclick跳转,需要通过JavaScript获取输入框的实时值,再拼接成完整的URL:

<input type="text" id="wprowadz" name="name"/>
<input type="button" value="Create" onclick="navigateToWynik()" />

<script>
function navigateToWynik() {
    // 获取输入框的值
    const inputValue = document.getElementById('wprowadz').value;
    // 用服务器端生成的基础地址,拼接参数(encodeURIComponent处理特殊字符)
    const baseUrl = '@Url.Action("Wynik", "Home")';
    const fullUrl = `${baseUrl}?name=${encodeURIComponent(inputValue)}`;
    // 跳转页面
    window.location.href = fullUrl;
}
</script>

注意:

encodeURIComponent非常重要,它会把输入中的特殊字符(比如空格、中文、&等)转成URL安全的格式,避免出现URL解析错误。

总结

你的核心错误是试图在服务器端代码中引用客户端的实时输入值,这两者的执行时机完全不同。选择表单提交(推荐)或JavaScript动态拼接URL,就能解决问题啦。

内容的提问来源于stack exchange,提问作者Radziu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:09:35