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
相关产品推荐
相关产品推荐

