C# 在MVC中创建具有两个实体模型列的TextBoxfor

C# 在MVC中创建具有两个实体模型列的TextBoxfor,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,首先,我解释了我的场景,我在DB中创建了CountryCode、PhoneNumber等列 并创建模型和控制器 鉴于此,我们需要在文本框中显示国家代码和电话号码,如(+91 9856254874) 当用户更改文本框值并提交时,我需要通过拆分代码和电话号码来更新相应的两列 我怎样才能做到这一点 这是我的模型: public partial class Details { public Nullable<int> ContryCode { get; set; } pu

首先,我解释了我的场景,我在DB中创建了CountryCode、PhoneNumber等列 并创建模型和控制器

鉴于此,我们需要在文本框中显示国家代码和电话号码,如(+91 9856254874)

当用户更改文本框值并提交时,我需要通过拆分代码和电话号码来更新相应的两列

我怎样才能做到这一点

这是我的模型:

 public partial class Details
 {
    public Nullable<int> ContryCode { get; set; }
    public string        PhoneNumber{ get; set; }
 }
此文本框位于@Html.begin内,当我单击submit按钮时,我需要使用文本框中分开的ContryCode和PhoneNumber更新DB

请在这方面帮助我


提前感谢

我能看到的最简单的方法就是为这两个字段创建两个不同的文本框

但是,您也可以使用字符串属性创建ViewModel,该属性连接ContryCode和PhoneNumber,如下所示:

public partial class DetailsViewModel
{
    public Nullable<int> ContryCode { get; set; }
    public string PhoneNumber{ get; set; }
    public string PhoneNumberWithContryCode 
    {
         get
         {
             return string.Format("+{0} {1}", ContryCode, PhoneNumber);
         }
         set
         {
              // Code to parse the string to ContryCode and PhoneNumber
         }
}
public分部类DetailsViewModel
{
公共可空控制码{get;set;}
公共字符串PhoneNumber{get;set;}
公共字符串PhoneNumberWithContryCode
{
得到
{
返回string.Format(“+{0}{1}”,ContryCode,PhoneNumber);
}
设置
{
//用于将字符串解析为ContryCode和PhoneNumber的代码
}
}
但是,对于这个选项,您需要考虑更多的问题,特别是验证。如果没有+,如果没有空间,等等

如果JavaScript是公平的,您可以使用原始视图,但将ContryCode和PhoneNumber属性绑定到隐藏字段。然后在表单中包含一个文本框,用于连接ContryCode和PhoneNumber的值。当此文本框更改值时,让一些JavaScript代码更新隐藏字段的值。这是必要的与上面的建议类似,解析/验证转移到纯JavaScript


我仍然建议您保持简单,改为使用两个文本框。

您不能将控件绑定到两个属性。要么创建两个文本框,要么创建一个视图模型,用属性表示整个电话号码,然后将其发回并在控制器中拆分(或创建自定义模型绑定器)您通常会使用两个输入,一个用于国家代码,另一个用于电话号码。即使我们不能使用Javascript做任何事情?我已经通过编写viewModel解决了这个问题,就像这个答案中的公共字符串PhoneNumber{get{return string.Format(“{0}{1}”,ContryCode,Mobile);}set{Mobile=value.Replace(“+”+MobileContryCode.ToString().Replace(“,”),”;}
public partial class DetailsViewModel
{
    public Nullable<int> ContryCode { get; set; }
    public string PhoneNumber{ get; set; }
    public string PhoneNumberWithContryCode 
    {
         get
         {
             return string.Format("+{0} {1}", ContryCode, PhoneNumber);
         }
         set
         {
              // Code to parse the string to ContryCode and PhoneNumber
         }
}