c# - 我无法获得我在 Controller 中发布的文本框中的值

标签 c# asp.net-mvc asp.net-mvc-4 razor

我正在使用 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; }
}

MSDN Nullable Types

编辑 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/

相关文章:

IE9 上的 jQuery ajax 问题

c# - 捕获所有 StatusCodes

c# - ASP.NET 模板

c# - 将连续的 64 位数字统一哈希为 8 位?

c# - 如何覆盖未标记为虚拟的事件处理程序?

asp.net-mvc - MVC 3 ViewModel 模式问题(使用 RAZOR)

asp.net - 带有Linux Docker自动生成的 “Service '的ASP.NET无法构建:COPY失败:stat/var/lib/docker/tmp/docker-builder”

asp.net-mvc-4 - 如何创建 ASP.NET WEB API 功能测试

c# - 如何在 mvc 4 razor 的数据库中保存嵌套的可排序菜单?

c# - 如何在MonoDevelop中使用BigInteger类?