我在.NET MVC 5中有一个表单,用户可以在其中写一个数字,默认为“0”,如果用户删除一个数字,例如“233”一场空无一人。表格不会提交。
如何以空字段提交表单?
public class myModel
{
public int nummer { get; set; }
public myModel(){}
public myModel(int i) {this.nummer = i;}
}
剃刀代码:
using (Html.BeginForm("myAction", "myController", FormMethod.Post, new { @class = "form-inline" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "", new { @class = "text- danger" })
@Html.EditorFor(model => model.nummer, new { htmlAttributes = new { @class = "form-control " } })
<input type="submit" value="submit" name="btnSubmit"/>
}
我对验证错误消息不感兴趣,但默认情况下将值设置为“0”。
答案 0 :(得分:3)
DefaultModelBinder
使用无参数构造函数初始化模型(永远不会调用第二个构造函数)。您需要使属性可以为空,以防止客户端和服务器端验证错误
public int? nummer { get; set; }
然后在POST方法中测试null,如果是,则将值设置为0
if(!model.nummer.HasValue)
{
model.nummer = 0;
}
或者,您可以编写自己的ModelBinder
来测试null
值,并在ModelBinder
中将值设置为0
答案 1 :(得分:1)
您需要将nummer
字段设置为可空类型,如下所示:
public class myModel
{
public int? nummer { get; set; }
...
}
这将允许用户在没有输入值的情况下提交表单。
然后,在控制器操作中,如果字段为空,则需要指定默认值:
if (model.nummer == null) model.nummer = 0;
或者,你可以像这样使用私人财产:
public class myModel
{
private int? privateNummer { get; set; }
public int? nummer
{
get { return this.privateNummer == null ? 0 : this.privateNummer; }
set
{
this.privateNummer = value;
}
}
}
答案 2 :(得分:0)
执行此操作..
model.find(id);
model.nummer =0;
return View(model)