我目前有:
@Html.EditorFor(model => model.PurchasePrice)
我想把它分成两个用小数分隔的单独字段(显然是价格输入)。但是,如果我使用基本文本框这样做,我将失去利用ASP.NET验证的能力。
有没有办法在Razor中或通过使用属性来执行此操作,以便我能够针对我的实体模型保留JS和服务器端验证?
我可以通过在viewmodel中创建自己的函数轻松地在其他地方执行此操作,但我是MVC3的新手,并不完全确定这是否是最佳路径或者有更简单的方法。
编辑:
这是我正在思考的方向,我不完全理解这是如何工作的。
我设置了2个字段,1个为ppDollar
,1个为ppCents
。在控制器中我有:
modelname.PurchasePrice = Request["ppDollar"] + Request["ppCent"];
但是,我可以看一下,并告诉它不会起作用。所以,我想问的问题是如何根据实体模型验证用户输入,以及如何更好地利用内置功能?
答案 0 :(得分:1)
您可以为EditorFor
呈现的特定类型创建自定义编辑器。您可以在线找到很多关于如何进行此操作的示例,其中大多数都专注于自定义DateTime
编辑器,但同样的想法适用于任何类型。只是快速搜索的一个例子:
简而言之,过程是:
Views\Shared\EditorTemplates
文件夹中的部分视图模板,其名称与类型相同(例如Decimal.cshtml
)。@inherits System.Web.Mvc.WebViewPage<System.Decimal>
EditorFor
重载传递HTML属性,该重载在模板中通过ViewData.ModelMetadata.AdditionalValues
属性引用。有一点需要注意:一旦定义了编辑器模板,它将用于对EditorFor
的每次调用。您可以将EditorTemplates
文件夹移动到相应的视图子文件夹而不是共享文件夹中,从而将它们扩展到特定控制器。