我正在使用 Asp.net MVC 4 和 .NET 4.5。 我有一个表,其中有一列是十进制而不是空值。我使用 MVC 的脚手架模板为由 Entity Framework 为该表创建的模型创建了一个 razor View 。
现在,当我们在 decimal 属性的文本框中输入 0 或无(null)时,在服务器上它会显示为 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 生成的类。
在 View 中我已经使用过
@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?
。这应该提交一个可以与零分开的空值。
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; }
}
编辑 2:
由于您对模型没有影响并且不想使用 View 模型和备份属性,这是另一种方法:使用自定义模型绑定(bind)器。
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 值。希望这会有所帮助。
关于c# - 我无法获得我在 Controller 中发布的文本框中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21727073/