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

C#分层架构中View向DAL传递参数的异常排查与解决

解决表单参数无法传递到控制器的问题

看起来你遇到的核心问题是表单提交时,输入的角色类型没有正确传递到控制器的SortedKarakter方法,导致后续DAL层缺失SQL参数引发异常。我来帮你梳理下原因和修复方案:

问题根源

ASP.NET MVC中,控制器的方法默认只接受GET请求,但Html.BeginForm()默认会生成POST请求。当表单以POST方式提交时,MVC无法将表单参数绑定到未标记[HttpPost]的控制器方法,所以karakterSoort参数会是null。

修复方案(二选一即可)

方案1:给控制器方法添加POST请求支持

在你的SortedKaraktersController的SortedKarakter方法上添加[HttpPost]特性,明确让它接收POST请求:

[HttpPost]
public ActionResult SortedKarakter(string karakterSoort)
{
    var sortedKarakters = _sortedKarakterLogic.GetSortedKarakters(karakterSoort);
    var _sortedKarakters = new List<KarakterViewModel>();
    foreach (var karakter in sortedKarakters)
    {
        _sortedKarakters.Add(new KarakterViewModel 
        { 
            KarakterId = karakter.KarakterId, 
            KarakterNaam = karakter.KarakterNaam, 
            KarakterSoort = karakter.KarakterSoort 
        }) ;
    }
    return View(_sortedKarakters);
}

方案2:修改表单为GET请求提交

在cshtml的Html.BeginForm中指定FormMethod.Get,让表单以GET方式提交,这样参数会通过URL传递,控制器的默认GET方法就能接收到:

@using (Html.BeginForm("SortedKarakter", "SortedKarakters", FormMethod.Get)) 
{ 
    <input type="text" name="karakterSoort" /> 
    <input type="submit" /> 
}

额外优化建议

为了避免用户空提交导致的异常,可以给输入框添加required属性,强制用户必须输入内容:

<input type="text" name="karakterSoort" required />

这样修改后,文本框的输入值就能正确传递到控制器,进而传递到DAL层完成数据库查询啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:57:56