asp.Net   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了asp.net-mvc – 在Asp.Net MVC中使用千位分隔符的十进制值大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个自定义模态类,其中包含一个小数成员和一个视图来接受此类的条目.一切运行良好,直到我添加了 javascripts来格式化输入控件内的数字.格式代码格式化输入的数字与千分隔符’,’当焦点模糊.

问题是,我的模态类中的小数值不会与千分隔符绑定/解析.当我用“1,000.00”测试时,ModelState.IsValid返回false,但是对于“100.00”是无效的.

如果您有任何解决方案,可以与我分享吗?

提前致谢.

样本类

public class employee
{
    public String Name { get; set; }
    public decimal Salary { get; set; }
}

样品控制器

public class employeeController : Controller
{
    [AcceptVerbs(httpVerbs.Get)]
    public ActionResult New()
    {
        return View();
    }

    [AcceptVerbs(httpVerbs.Post)]
    public ActionResult New(employee E)
    {
        if (ModelState.IsValid) // <-- it is retruning false for values with ','
        {
            //Subsequence codes if entry is valid.
            //
        }
        return View(E);
    }
}

样品视图

<% using (Html.beginForm())
   { %>

    Name:   <%= Html.TextBox("Name")%><br />
    Salary: <%= Html.TextBox("Salary")%><br />

    <button type="submit">Save</button>

<% } %>

我试过一个解决方法与自定义ModelBinder亚历山大建议.问题解决了.但是,IDataErrorInfo实现的解决方案并不顺利.由于验证,输入0时,工资值变为空值.有什么建议吗
Asp.Net MVC团队成员来到stackoverflow?我可以从你那里得到一点帮助吗?

亚历山大建议的自定义模型绑定器的更新代码

型号粘合剂

public class MymodelBinder : DefaultModelBinder {

    public override object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext) {
        if (bindingContext == null) {
            throw new ArgumentNullException("bindingContext");
        }

        ValueProviderResult valueResult;
        bindingContext.ValueProvider.TryGetValue(bindingContext.ModelName,out valueResult);
        if (valueResult != null) {
            if (bindingContext.ModelType == typeof(decimal)) {
                decimal decimalAttempt;

                decimalAttempt = Convert.Todecimal(valueResult.Attemptedvalue);

                return decimalAttempt;
            }
        }
        return null;
    }
}

员工班

public class employee : IDataErrorInfo {

    public String Name { get; set; }
    public decimal Salary { get; set; }

    #region IDataErrorInfo Members

    public String this[String columnName] {
        get {
            switch (columnName)
            {
                case "Salary": if (Salary <= 0) return "Invalid salary amount."; break;
            }
            return String.Empty;
        }
    }

    public String Error{
        get {
            return String.Empty;
        }
    }

    #endregion
}

解决方法

似乎总是有某种形式的解决方法被找到,以使默认模型绑定器快乐!我想知道您是否可以创建一个仅由模型绑定器使用的“伪”属性? (注意,这绝对不是优雅的,我自己,似乎越来越多地采取类似的技巧,因为他们工作,他们得到工作“完成”…)还要注意,如果你使用一个单独的“ViewModel”(我建议这样做),你可以把这段代码放在那里,让你的域模型很好,干净.
public class employee
{
    private decimal _Salary;
    public String MvcSalary // yes,a String. Bind your form values to this!
    {
        get { return _Salary.ToString(); }
        set
        { 
            // (Using some pseudo-code here in this pseudo-property!)
            if (AppearsToBeValiddecimal(value)) {
                _Salary = StripCommas(value);
            }
        }
    }
    public decimal Salary
    {
        get { return _Salary; }
        set { _Salary = value; }
    }
}

在我打了这个电话之后,我现在回头看看,我甚至犹豫要发贴,真是太丑了!但如果你认为这可能是有帮助的,我会让你决定…

祝你好运!-麦克风

大佬总结

以上是大佬教程为你收集整理的asp.net-mvc – 在Asp.Net MVC中使用千位分隔符的十进制值全部内容,希望文章能够帮你解决asp.net-mvc – 在Asp.Net MVC中使用千位分隔符的十进制值所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。