Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不带必需属性的整数属性仍然是必需的_C#_Asp.net Mvc_Validation_Asp.net Mvc 5 - Fatal编程技术网

C# 不带必需属性的整数属性仍然是必需的

C# 不带必需属性的整数属性仍然是必需的,c#,asp.net-mvc,validation,asp.net-mvc-5,C#,Asp.net Mvc,Validation,Asp.net Mvc 5,我没有对integer属性应用任何[Required]属性验证。但每次我发布表单时,它都会引发验证。最初,它在客户端使用HTML5数据属性。我已在Web.config中将ClientValidationEnabled设置为false。之后,它将触发所需的属性验证。 我创建了一个新项目,但情况相同。尝试将.Net framework从4.6更改为4.5,但没有成功。还尝试了VS2015和VS2013 客户端代码 @使用(Html.BeginForm(“Index”,“Home”,FormMetho

我没有对integer属性应用任何[Required]属性验证。但每次我发布表单时,它都会引发验证。最初,它在客户端使用HTML5数据属性。我已在Web.config中将ClientValidationEnabled设置为false。之后,它将触发所需的属性验证。 我创建了一个新项目,但情况相同。尝试将.Net framework从4.6更改为4.5,但没有成功。还尝试了VS2015和VS2013 客户端代码

@使用(Html.BeginForm(“Index”,“Home”,FormMethod.Post,new{@class=“form horizontal”,role=“form”}))
{
@LabelFor(model=>model.Weight)
@Html.TextBoxFor(model=>model.Weight,新的{@class=“form control”,@placeholder=“Weight”,Value=”“})
@Html.ValidationMessageFor(model=>model.Weight,“,new{@class=“text danger”})
}
型号:

公共类注册模型
{
公共整数权重{get;set;}
}
作用方法

public ActionResult Index()
{
var模型=新注册模型();
返回视图(模型);
}
[HttpPost]
公共行动结果索引(注册模型)
{
if(ModelState.IsValid)
{
}
返回视图();
}
谢谢

这可能会对你有所帮助

<form method="post" action="/foo" novalidate>...</form>
。。。


您的模型属性是typeof
int
int
必须始终有一个值(它不可为null),因此无论禁用客户端验证,只要点击控制器,
ModelState
将无效,如果您为
权重提交
null
(空字符串)值

如果要允许为null,则必须使属性为null

public int? Weight { get; set; }

旁注:当您使用html帮助程序绑定到模型属性时,千万不要尝试设置
属性。

这是integer类型属性的默认行为,因为int必须
值甚至为零。因此,您必须在模型中将其设置为可为null的int类型。

如果可能,显示
模型
代码以及模型和视图中的所有其他属性?您不需要将
[必需]
属性应用于默认情况下为
int
所需的属性(它必须有一个值)。如果您正在为
重量发布一个
null
(空字符串)值,那么您将始终得到一个验证错误。如果希望它可以为null,那么需要将其设置为
public int?权重{get;set;}
并且在使用html帮助程序时(就像您使用
new{value=”“}
所做的那样)不要尝试设置
属性来显示模型代码和操作method@Hiba我刚刚编辑了我的问题。但斯蒂芬·穆克的评论是正确的。这是integer类型属性的默认行为。在您的情况下,我们将通过验证。但在某些情况下,我可能需要验证:),因此您可以明确限制第二种情况中提到的特定控件的验证,即对不起,我不确定这里的模型是否显示验证所需的任何数据注释。你能解释一下吗?@stephen主键中的if属性如何?不可能nullable@Hiba,不,PK字段不能为空,因此您不会对PK属性执行此操作(您也不希望-如果恶意用户试图为PK属性发布
null
值,您希望
ModelState
无效),它会在int属性为PK时发生,并且在添加新属性时发生。所以我推荐ModelState.Remove(“Weight”);但是你的回答是正确的well@Hiba,您不应该使用类似于
ModelState.Remove()
的hack,如果它是PK,那么属性将是
int
(不可为null),如果它是新对象,则默认值将是
0
(并且它在视图中永远不会被编辑。在任何情况下,如果您创建了一个新的对象,您应该使用一个视图模型,如果PK没有属性,那么它永远不会无效。
public int? Weight { get; set; }