ili*_*ian 6 model-binding asp.net-mvc-4
我有一个自定义类型的模型绑定器Money.绑定器工作正常,但内置的绑定/验证正在进行,并将数据标记为无效.
我的活页夹看起来像这样:
public class MoneyModelBinder : DefaultModelBinder
{
protected override void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var money = (Money)bindingContext.Model;
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + ".Amount").AttemptedValue;
var currencyCode = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + ".Iso3LetterCode").AttemptedValue;
Money parsedValue;
if (String.IsNullOrEmpty(value))
{
money.Amount = null;
return;
}
var currency = Currency.FromIso3LetterCode(currencyCode);
if(!Money.TryParse(value, currency, out parsedValue))
{
bindingContext.ModelState.AddModelError("Amount", string.Format("Unable to parse {0} as money", value));
}
else
{
money.Amount = parsedValue.Amount;
money.Currency = parsedValue.Currency;
}
}
}
Run Code Online (Sandbox Code Playgroud)
当用户在文本框中键入类似"45,000"的值时,我的绑定器会正确地获取值,解析它并将其设置到模型中.
我遇到的问题是,默认验证然后启动状态The value '45,000' is not valid for Amount,因为它是十进制类型有意义,但我已经绑定了数据.如何防止我已经处理过的默认绑定器绑定数据?
我不确定这是否有任何区别,但我正在使用Html.EditorFor和编辑器看起来像这样:
@model Money
<div class="input-prepend">
<span class="add-on">@Model.Currency.Symbol</span>
@Html.TextBoxFor(m => m.Amount, new{
placeholder=string.Format("{0}", Model.Currency),
@class="input-mini",
Value=String.Format("{0:n0}", Model.Amount)
})
@Html.HiddenFor(x => x.Iso3LetterCode)
</div>
Run Code Online (Sandbox Code Playgroud)
您只需将该Amount属性标记为只读:
[ReadOnly(true)]
public decimal? Amount { get; set; }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
437 次 |
| 最近记录: |