我正在使用.NET MVC为新用户创建IQ测试。目前,我已将表单设置发布到数据库:
<div class="form-group">
<input type="button" class="btn btn-default personality-finish-btn" value="send" />
</div>
但是出于引导验证的原因,我需要切换到type =&#34;提交&#34;像这样:
<div class="form-group">
<input type="submit" class="btn btn-default personality-finish-btn" value="Submit" />
</div>
通过单击提交按钮发布表单时,我在MVC中遇到了一个长期令人讨厌的错误:
&#39;参数字典包含参数&#39; pass&#39;的空条目。非可空类型&#39; System.Boolean&#39; for method&Th; System.Threading.Tasks.Task`1 [System.Web.Mvc.JsonResult] PersonalityEvaluation(System.String,Boolean)&#39; in&#39; TechAcademyLMS.Controllers.RegistrationController&#39;。可选参数必须是引用类型,可空类型,或者声明为可选参数。 参数名称:参数&#39;
仅在更改类型&#34;按钮&#34;输入&#34;提交&#34;。由于我没有在发布逻辑中的任何位置调用按钮,因此我确信这必须是内置的HTML问题。
非常感谢任何线索,谢谢。
编辑:
这是我一直在使用的当前验证逻辑。我以前没有使用bool,所以我不知道为什么我现在需要:
$(document).ready(function () {
$(".personality-finish-btn").on("click", function () {
checkPersonalityRadio();
})
})
function checkPersonalityRadio() {
var pass = false;
var score = 0;
for (var i = 1; i < 51; i++) {
var value = $("input[name='eval-checkbox-" + i + "']:checked").val();
if (value !== undefined) {
score += parseInt(value);
}
};
if (score >= 35 && 50) {
score += " Pass";
pass = true;
} else if (score <= 34){
score += " Fail";
}
score = JSON.stringify(score);
$.ajax({
type: "POST",
url: "/Registration/PersonalityEvaluation",
data: { score: score, pass: pass },
success: function (response) {
window.location.href = "/Registration/StepTwelve";
},
dataType: "json",
error: function () {
console.log(data);
alert("Whoops, something went wrong.");
},
traditional: true
});
}
答案 0 :(得分:2)
按钮类型不提交表单,但它运行您的javascript函数。类型提交的输入实际上提交了包含输入的表单。
如果您想运行javascript但不想提交表单,请使用submit事件,然后取消默认表单行为,如下所示:
In [669]: A.reshape(-1,A.shape[-1])[B.ravel()].reshape(3,5,4)
Out[669]:
array([[[ 0.1 , 0.91, 0.1 , 0.98],
[ 0.1 , 0.91, 0.1 , 0.98],
[ 0.1 , 0.91, 0.1 , 0.98],
[ 0.45, 0.16, 0.02, 0.02],
[ 0.1 , 0.91, 0.1 , 0.98]],
[[ 0.45, 0.16, 0.02, 0.02],
[ 0.48, 0.6 , 0.96, 0.21],
[ 0.48, 0.6 , 0.96, 0.21],
[ 0.1 , 0.91, 0.1 , 0.98],
[ 0.45, 0.16, 0.02, 0.02]],
[[ 0.48, 0.6 , 0.96, 0.21],
[ 0.45, 0.16, 0.02, 0.02],
[ 0.48, 0.6 , 0.96, 0.21],
[ 0.45, 0.16, 0.02, 0.02],
[ 0.45, 0.16, 0.02, 0.02]]])
更新: 我认为您的问题是您尝试在POST提交中发送两个参数。 ModelBinder尝试将这些参数映射到一个对象,因此它可能会尝试将所有参数分配给 PersonalityEvaluation(System.String,Boolean)中的字符串,这就是为什么你的布尔值总是为空。
您最好的选择是创建一个包装两个属性的对象。类似的东西:
$(".personality-finish-btn").on("submit", function () {
checkPersonalityRadio(); // here you can send you details to API controller by Ajax.
return false; //this will avoid the default form behaviour, which is being submitted.
})
所以你的控制器中的动作方法看起来像是:
public class TestResults(){
public string score {get; set;}
public bool pass {get; set;}
}
请查看此链接http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api
答案 1 :(得分:0)
Tony我在项目中多次出现此错误并成功解决了。所以,如果仔细观察错误,就说
'参数字典包含一个 null条目,用于参数'pass'的非可空类型'System.Boolean',用于方法'System.Threading.Tasks.Task`1 [System.Web。 Mvc.JsonResult] PersonalityEvaluation(System.String,Boolean)'在'TechAcademyLMS.Controllers.RegistrationController'中。可选参数必须是引用类型,可空类型,或者声明为可选参数。参数名称:参数'
<强>解释强>
我假设您正在使用PersonalityEvaluation()的参数,如下所示:
PersonalityEvaluation(String somename,Bool somename)
所以错误说,我们将null值传递给bool参数,但同时我们指定为非可空类型。
注意:无论您从简单视图操作链接还是从ajax javascript发送参数,错误都将保持不变。
<强>溶液强>
您可以将参数设为可为空类型,如下所示:
PersonalityEvaluation(String somename,Bool?somename)
或确保您是alaways发送参数而不使用null alaways以使其成为可空类型。对于一个字符串我们不用担心它已经是一个可以为空的类型了。所以没问题.. :)
希望以上信息有用,请让我知道您的想法或反馈
由于
KARTHIK