我无法在控制器中发布的文本框中获取值

我正在使用Asp.net MVC 4和.NET 4.5.
我有一张表,其中一列是十进制而不是空值.我使用MVC的脚手架模板为该表的实体框架创建的模型创建了一个剃刀视图.

现在,当我们在十进制属性的文本框中输入0或不输入任何内容(空)时,在服务器上它将变为0.
验证后,它在文本框中显示为零.

有什么方法可以用来识别客户是否在文本框中输入了零或空值,以便在回发后(如果有任何验证的情况下)客户获得他/她已过帐的值

更新1

public partial class Student
{
    public int StudentID { get; set; }
    public string LastName { get; set; }
    public string FirstMidName { get; set; }
    public System.DateTime EnrollmentDate { get; set; }
    public decimal RollNo { get; set; }
}

是EF生成的类.

而在我看来

@Html.TextBox("Students[0].RollNo", Model.Students[0].RollNo)

在我的模型中,此类的此列表是一个属性.

解决方法:

我建议使用如下所述的自定义验证属性:ASP.NET MVC: Custom Validation by Data Annonation

public class MyAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        int temp;

        if (!Int32.TryParse(value.ToString(), out temp))
            return false;

        return true;
    }
}

并使用[MyAttribute]装饰您的媒体资源

编辑:

由于空文本框提供的空值为零,只需将属性更改为可为空的double即可.这应该提交一个可以与零分隔的null.

public partial class Student
{
    public int StudentID { get; set; }
    public string LastName { get; set; }
    public string FirstMidName { get; set; }
    public System.DateTime EnrollmentDate { get; set; }
    public decimal? RollNo { get; set; }
}

MSDN Nullable Types

编辑2:

由于您对模型没有影响,并且不想使用viewmodels和backupproperties,因此这是另一种方法:使用自定义modelbinder.

public class DoubleModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var valueResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        if (string.IsNullOrEmpty(valueResult.AttemptedValue))
        {
            return double.NaN;
        }
        return valueResult;
    }
}

 protected void Application_Start()
 {
     ModelBinders.Binders.Add(typeof(double), new DoubleModelBinder());
 }

如果提交的值为空,则将为您提供模型中恒定的double.NaN值.希望这可以帮助.

上一篇:剃刀视图没有看到外部程序集


下一篇:CodeGo.net>为什么jqueryval包渲染为空?