【问题标题】:Accessing regex groups in view (mvc)访问视图中的正则表达式组 (mvc)
【发布时间】:2016-07-08 21:40:59
【问题描述】:

我有一个“PhoneNumber”字符串,我需要将其解析为 3 个部分。我需要将每个部分显示在视图中的单独字段中。我知道如何通过向模型中添加其他字符串来实现这一点,但问题是我不再能做到这一点。我需要能够使用组捕获部件并以某种方式通过“PhoneNumber”访问它们。这可能吗?

型号:

public string PhoneNumber
    {
        get
        {
            return _phoneNumber;
        }
        set
        {
            Regex regexObj = new Regex(@"[^\d]");
            _phoneNumber = regexObj.Replace(value, ""); 
            var match = Regex.Match(_phoneNumber, @"(\d{3})(\d{3})(\d{4})");

            if (match.Success)
            {                        
                _phoneNumber = string.Format("({0}) {1}-{2}", match.Groups[1], match.Groups[2], match.Groups[3]);

            }

        }
    }
    private string _phoneNumber;

查看(这是我需要分隔组的地方):

 @Html.TextBoxFor(model => model.Pharmacy.PhoneNumber, new { @id = "txtPhoneNumber", @Name = "txtPhoneNumber" })

【问题讨论】:

  • 上面的代码有什么问题。你期待什么?
  • @Venky 显示所有 10 位数字。我需要为视图中的前 3 位数字、接下来的 3 位数字和最后 4 位数字设置一个单独的文本框。
  • 请注意,model-view-controller 标签是针对有关模式的问题。 ASP.NET-MVC 实现有一个特定的标记。

标签: c# regex asp.net-mvc


【解决方案1】:

据我所知,如果您想让它们显示为三个不同的文本框,您需要在模型上具有三个不同的属性。所以我建议有一个电话号码类,其属性为区号、交换、分机,例如:

public class PhoneNumber {
    public string AreaCode {get;set;}
    public string Exchange {get;set;}
    public string Extension {get;set;}
}

然后您将能够看到具有以下内容的视图:

@Html.TextBoxFor(model => model.Pharmacy.PhoneNumber.AreaCode, new { @id = "txtPhoneNumber_AreaCode", @Name = "txtPhoneNumber.AreaCode" })
@Html.TextBoxFor(model => model.Pharmacy.PhoneNumber.Exchange, new { @id = "txtPhoneNumber_Exchange", @Name = "txtPhoneNumber.Exchange" })
@Html.TextBoxFor(model => model.Pharmacy.PhoneNumber.Extension, new { @id = "txtPhoneNumber_Extension", @Name = "txtPhoneNumber.Extension" })

为了重用,您还可以创建一个 PhoneNumber 视图,然后当您需要再次使用此编辑器时,您可以使用 @Html.EditorFor(model => model.Pharmacy.PhoneNumber) 而不是在整个应用程序中为所有 PhoneNumber 类指定此代码。您也可以保留上面的正则表达式,然后将电话号码分成AreaCodeExchangeExtension

【讨论】:

  • 我知道这种方法,但我想看看是否可以使用组从数据库中捕获传入数据,并在我的视图中单独显示它们。这不会迫使我对存储过程进行更改吗?因为那正是我不应该做的。
  • @thatdude 从技术上讲,您不需要对数据库/存储过程进行更改,您只需在从数据库中读取时将其拆分,并在将其放入数据库时​​将其连接在一起。您可以添加另一个属性来保存连接的字符串并创建一个 get 和一个 set 来连接/拆分传入的字符串。然后这个值可能是从数据库中保存/读取的值。
  • 您的回答和另一篇文章的回答帮助我弄清楚了如何实现我所需要的。谢谢你,好先生。 :)
  • @thatdude 没问题,很高兴听到。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-24
  • 2021-08-07
相关资源
最近更新 更多