问题描述
|
我有一个表格,希望用户输入其电话号码。但是,该表格如下所示:
[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\"];
...
}