发布表格i .NET MVC时如何将默认值设置为空的EditorFor-field

时间:2016-02-29 09:08:21

标签: asp.net-mvc forms

我在.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”。

3 个答案:

答案 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)