参数在 ActionResult 中没有给出正确的值
Posted
技术标签:
【中文标题】参数在 ActionResult 中没有给出正确的值【英文标题】:The params doesn't give the right values in the ActionResult 【发布时间】:2021-06-24 09:19:51 【问题描述】:我有一个导入 Excel 数据的过程。这很好用。但是为了开始这个过程,我必须选择一些值。 “Year from”、“Year to”和参数isTest。
我想更改导入值的范围。我尝试了几种解决方案。但没有任何效果。 更改值并单击提交按钮后,我想查看新值。
我必须在代码中更改什么?
这是 ActionResult:
[HttpPost]
public IActionResult Importeren(int jaarVan, int jaarTm, bool isTest)
//minValue = 1981; maxValue = 2004; isTest = true;
_importProces.Start(jaarVan, jaarTm, isTest);
return View();
这是html页面:
@using (Html.BeginForm("Importeren", "Home", new jaarVan = ViewBag.JaarVan, jaarTm = ViewBag.JaarTm, isTest = ViewBag.IsTest , FormMethod.Post))
<div class="form-group">
<div class="col-md-2 col-xl-2">
@Html.Label("Jaar vanaf:")
</div>
<div class="col-md-2 col-xl-2">
@Html.Hidden("#JaarVan")
<span id="lblJaarVan">@ViewBag.JaarVan</span><input type="range" id="jaarVan" value="@ViewBag.JaarVan" min="@ViewBag.MinValue" max="@ViewBag.MaxValue" step="1"
onshow="showJaarVan(this.value)" oninput="showJaarVan(this.value)" onchange="showJaarVan(this.value)" />
</div>
<div class="col-md-2 col-xl-2">
@Html.Label("Jaar tot/met:")
</div>
<div class="col-md-2 col-xl-2">
@Html.Hidden("#JaarTm")
<span id="lblJaarTm">@ViewBag.JaarTm</span><input type="range" id="jaarTm" value="@ViewBag.JaarTm" min="@ViewBag.MinValue" max="@ViewBag.MaxValue" step="1"
onshow="showJaarTm(this.value)" oninput="showJaarTm(this.value)" onchange="showJaarTm(this.value)" />
</div>
<div class="col-md-2 col-xl-2">
@Html.Label("Is test:")
@Html.Hidden("#IsTest")
<input type="checkbox" id="isTest" value="@ViewBag.IsTest" checked="@ViewBag.IsTest" />
</div>
@*<progress*@
<p> <input class="text-primary" type="submit" value="Import Exceldata" name="Opslaan" /></p>
</div>
<script>
//$(document).ready(function ()
// $('#frmsubmit').submit(function ()
// var jaarVan = document.getElementById("#jaarVanRange").value;
// var jaarTm = document.getElementById("#jaarTmRange").value;
// var isTest = document.getElementById("#isTest").value;
// )
//);
function showJaarVan(newVal)
document.getElementById("lblJaarVan").innerHTML = newVal;
ViewViewBag.JaarVan = newVal;
function showJaarTm(newVal)
document.getElementById("lblJaarTm").innerHTML = newVal;
ViewViewBag.JaarTm = newVal;
</script>
【问题讨论】:
【参考方案1】:我相信 MVC 表单帖子的模型绑定依赖于输入的名称属性,请尝试在输入中添加名称以匹配操作中的参数:
<input type="range" id="jaarTm" name="jaarTm" value="@ViewBag.JaarTm" min="@ViewBag.MinValue" max="@ViewBag.MaxValue" step="1" onshow="showJaarTm(this.value)" oninput="showJaarTm(this.value)" onchange="showJaarTm(this.value)" />
我也不认为您需要在 BeginForm() 调用中包含路由值对象,因为表单数据在模型绑定中具有更高的优先级。该对象也在发布之前进行评估,并保存原始年份,而不是您在范围输入中设置的新年份。
【讨论】:
确实我不需要路由值。我知道了。感谢您的年份值(最重要)有效。以上是关于参数在 ActionResult 中没有给出正确的值的主要内容,如果未能解决你的问题,请参考以下文章
控制器 ActionResult 方法参数未从 ajax 调用接收表单数据