首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多个表单域映射到模型属性

将多个表单域映射到模型属性
EN

Stack Overflow用户
提问于 2011-05-31 07:58:47
回答 4查看 390关注 0票数 1

我有一个表单,我想让用户把它的电话号码。但是,表单看起来是这样的:

代码语言:javascript
复制
  [FormField-1] - [FormField-2] - [FormField-3]

其中有三个文本框便于用户将其放入xxx-xxx-xxxx格式。但是,我的模型类是:

代码语言:javascript
复制
class Person
{
  [Required(ErrorMessage="Phone Mandatory!")]
  public string phone {get; set;}
}

我的观点是这样的:

代码语言:javascript
复制
@model MvcApplication1.Models.Person

@using ( Html.BeginForm("Create", "Home"))
{
  @Html.TextBoxFor( model => model.phone )
  @Html.ValidationMessageFor( model => model.phone )<br />
  <input type="submit" value="submit" />
}

我如何解决这个问题,这样我就不需要有三个不同的类属性来匹配表示电话号码的三个不同的表单字段?

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-31 16:11:38

在这种情况下,我会使用自定义的ViewModel。

票数 1
EN

Stack Overflow用户

发布于 2011-05-31 08:03:12

您可以使用自定义模型绑定器来实现这一点。

基本上,您注册一个类型(您创建的类型)来处理特定的模型,并且您可以读取张贴的表单字段并手动填充您的模型,而不是使用默认的模型绑定器来执行此操作。我想这是你在这种情况下唯一的选择。

您可以通过从默认模型绑定器继承,然后自己手动处理更复杂的字段来使其更容易。

有关使用自定义模型绑定的更多信息,请查看以下内容:Custom Model Binder

编辑:如果你不想使用自定义模型绑定,你也可以在你的操作中接受一种类型的FormCollection来读取原始发布的数据并在那里处理它,但这取决于你将来想如何扩展你的模型,我猜。

票数 2
EN

Stack Overflow用户

发布于 2011-05-31 08:04:43

一种更简单的解决方案是在表单上使用一些javascript,将三个单独的值保存到一个隐藏输入中,并将该单个输入绑定到模型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6181712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档