2

我目前有:

@Html.EditorFor(model => model.PurchasePrice)

我想将其拆分为 2 个由小数分隔的单独字段(显然用于价格输入)。但是,如果我使用基本文本框来执行此操作,我将失去利用 ASP.NET 验证的能力。

有没有办法在 Razor 中或通过使用属性来做到这一点,以便我能够针对我的实体模型保留 JS 和服务器端验证?

我可以通过在视图模型中创建自己的函数来轻松地在其他地方做到这一点,但我是 MVC3 的新手,并不完全确定这是否是最佳路线或是否有更简单的方法。

编辑:

这是我正在考虑的一种方向,我不完全理解它是如何工作的。

我设置了 2 个字段,1 asppDollar和 1 as ppCents。在控制器中我有:

modelname.PurchasePrice = Request["ppDollar"] + Request["ppCent"];

但是,我可以看看它并告诉它行不通。所以,我想问题真的是如何根据实体模型验证用户输入,以及如何更好地利用内置功能?

4

1 回答 1

1

您可以为特定类型创建自定义编辑器,这些类型由EditorFor. 您可以在网上找到很多关于如何做到这一点的示例,其中大多数都专注于自定义DateTime编辑器,但同样的想法适用于任何类型。快速搜索中的一个示例:

http://buildstarted.com/2010/09/10/overriding-displayfor-and-editorfor-to-create-custom-outputs-for-mvc/

简而言之,过程是:

  • 创建一个局部视图模板,放置在Views\Shared\EditorTemplates文件夹中,名称与类型相同(例如Decimal.cshtml)。
  • 视图应使用您要显示的类型作为其模型:@inherits System.Web.Mvc.WebViewPage<System.Decimal>
  • 使用某些字段命名约定或其他方式,使视图显示您想要的任何内容。
  • 您还可以通过适当的EditorFor重载传递 HTML 属性,通过属性在模板中引用ViewData.ModelMetadata.AdditionalValues

需要注意的一点:一旦定义了编辑器模板,它将用于每次调用EditorFor. EditorTemplates您可以通过将文件夹移动到适当的视图子文件夹而不是共享的子文件夹来将它们限定到特定的控制器。

于 2012-07-08T22:55:54.863 回答