C# 合并2个TextBoxFor绑定到一个属性MVC

C# 合并2个TextBoxFor绑定到一个属性MVC,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我需要将联系人号码保存在注册表中,其中有两个文本框,一个用于国家代码,另一个用于号码。现在,我需要将两者结合起来,并绑定到我的类中的单个属性中。我该怎么做 查看: <div class="form-group"> @Html.LabelFor(m => m.Phone, "Contact Number:") @Html.TextBoxFor(m => m.xxxx,new { @class = "form-control", @id = "txt

我需要将联系人号码保存在注册表中,其中有两个文本框,一个用于
国家代码
,另一个用于
号码
。现在,我需要将两者结合起来,并绑定到我的类中的单个属性中。我该怎么做

查看:

 <div class="form-group">
      @Html.LabelFor(m => m.Phone, "Contact Number:")
      @Html.TextBoxFor(m => m.xxxx,new { @class = "form-control", @id = "txtContactCode", required="required", type ="number" })-
      @Html.TextBoxFor(m => m.Phone,new { @class = "form-control", @id = "txtContactNumber", required="required", type ="number" })
 </div>

现在,我应该绑定电话号码字段代码中的属性以连接为一个吗?是否有任何方法,或者我应该声明另一个名为
code
的属性,然后继续?

一般来说,您不应该尝试拆分/联接对象。您只是在应用程序中引入了一个潜在的故障点。如果您只关心存储单个组合的
电话
,那么让用户直接在
电话
的字段中输入他们的电话号码。如果您关心确保每个电话号码都有一个国家/地区代码,那么您可以使用这样的电话号码验证库来解析用户输入的电话号码,并将其存储在数据库中的方式标准化

尝试将两个字段合并为一个字段的问题是,然后必须将一个字段拆分为两个。特别是像国家代码这样长度可变的代码,这将很难可靠地实现。但是,如果您坚持走这条路,我建议您使用如下视图模型:

public string Phone
{
    get { return String.Format("{0} {1}", CountryCode, Number); }
    set
    {
        CountryCode = null;
        Number = null;

        if (value != null)
        {
            var parts = value.Split(new[] { ' ' }, 2);
            if (parts.Length == 2)
            {
                CountryCode = parts[0];
                Number = parts[1];
            } 
        }
    }
}

public string CountryCode { get; set; }
public string Number { get; set; }

然后,您将分别绑定到视图中的
CountryCode
Number
Phone
自定义getter和setter将负责在组合部件和组成部件之间来回转换。

您可以使用
IModelBinder
界面中提供的
BindModel()
方法轻松完成此操作

使用指定的控制器上下文和绑定上下文将模型绑定到一个值

另见


注意:在上述示例中,
名字
中间名
姓氏
绑定到全名属性。您可以以相同的方式将所需的两个属性绑定到一个属性。

使用具有属性
CountryCode
PhoneNumber
的视图模型,并在POST方法中组合值并将其映射到数据模型
Phone
property显示为您的属性分配值的代码model@StephenMuecke我会做的相同的谢谢
public string Phone
{
    get { return String.Format("{0} {1}", CountryCode, Number); }
    set
    {
        CountryCode = null;
        Number = null;

        if (value != null)
        {
            var parts = value.Split(new[] { ' ' }, 2);
            if (parts.Length == 2)
            {
                CountryCode = parts[0];
                Number = parts[1];
            } 
        }
    }
}

public string CountryCode { get; set; }
public string Number { get; set; }