将超过1个表单字段映射到模型属性

问题描述

| 我有一个表格,希望用户输入其电话号码。但是,该表格如下所示:
  [FormField-1] - [FormField-2] - [FormField-3]
其中有三个文本框,方便用户以xxx-xxx-xxxx格式输入。但是,我的模型类是:
class Person
{
  [Required(ErrorMessage=\"Phone Mandatory!\")]
  public string phone {get; set;}
}
我的看法如下所示:
@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\" />
}
我该如何解决这个问题,这样我就不必具有三个不同的类属性即可匹配代表电话号码的3个不同的表单字段? 谢谢!     

解决方法

        在这种情况下,我将使用自定义ViewModel。     ,        您可以使用自定义模型活页夹来实现此目的。 基本上,您注册一个(创建的)类型来处理特定的模型,并且您可以阅读已发布的表单字段并手动填充模型,而不必使用默认的模型绑定器来完成。我认为这是您唯一的选择。 您可以通过继承默认模型绑定程序来简化操作,而您自己可以手动处理更复杂的字段。 请查看此内容,以获取有关使用自定义模型绑定的更多信息:Custom Model Binder 编辑:如果您不想使用自定义模型绑定进行扩展,也可以在操作中接受一种FormCollection来读取原始发布的数据并在其中进行处理,但这取决于您要使用的方式我猜想将来扩展您的模型。     ,        一种更简单的解决方案是在表单上使用一些javascript将三个单独的值保存到一个隐藏的输入中,并将该单个输入绑定到模型。     ,        另一个解决方案也可能是在Action方法中使用以下方法构建电话号码值:
[HttpPost]                                                        
public ActionResult FormSubmit(Person person)
{
     person.phone =  Request.Form[\"FormField-1\"] +  Request.Form[\"FormField-2\"] + Request.Form[\"FormField-3\"];
    ...

}
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...