Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据长度设置数字字符串的格式_Javascript_C#_Asp.net Mvc_Razor - Fatal编程技术网

Javascript 根据长度设置数字字符串的格式

Javascript 根据长度设置数字字符串的格式,javascript,c#,asp.net-mvc,razor,Javascript,C#,Asp.net Mvc,Razor,在我的模型中,我有一个cNumber字符串,它可以是不同的长度(16、24和28),我需要在表中的视图中相应地格式化它 16 length: ########-######## 24 : ########-########-######## 28 : #### #### #### #### #### #### #### static string Format(string cNumber) { if

在我的模型中,我有一个cNumber字符串,它可以是不同的长度(16、24和28),我需要在表中的视图中相应地格式化它

  16 length: ########-########
  24 : ########-########-########
  28 : #### #### #### #### #### #### ####
        static string Format(string cNumber)
        {
            
            if (cNumber.Length == 16 || cNumber.Length == 24)
            {
                cNumber= Regex.Replace(cNumber, ".{8}", "$0-");
            }
            else if (cNumber.Length == 28)
            {
                cNumber= Regex.Replace(cNumber, ".{4}", "$0 ");
            }
            else
            {
                return cNumber;
            }

            cNumber= cNumber.Remove(cNumber.Length - 1);

            return cNumber;
        }

        
        public ActionResult Index(Guid id)
        {
            var PartnerCNumbers = db.PartnerCNumbers.Include(p => p.Partner).Where(p=>p.Partner.PartnerGuid == id);

            

            var cNumList = new List<string>();

            foreach (var cn in PartnerCNumbers)
            {
                cNumList.Add(Format(cn.cNumber));
            }

            
            ViewData["cNumbers"] = cNumList;
            ViewBag.PartnerGuid = id;
         

            return View(PartnerCNumbers.ToList());
        }
更新:我确实有一个格式化方法,但我很难将它传递给视图,以显示在表的正确记录中

  16 length: ########-########
  24 : ########-########-########
  28 : #### #### #### #### #### #### ####
        static string Format(string cNumber)
        {
            
            if (cNumber.Length == 16 || cNumber.Length == 24)
            {
                cNumber= Regex.Replace(cNumber, ".{8}", "$0-");
            }
            else if (cNumber.Length == 28)
            {
                cNumber= Regex.Replace(cNumber, ".{4}", "$0 ");
            }
            else
            {
                return cNumber;
            }

            cNumber= cNumber.Remove(cNumber.Length - 1);

            return cNumber;
        }

        
        public ActionResult Index(Guid id)
        {
            var PartnerCNumbers = db.PartnerCNumbers.Include(p => p.Partner).Where(p=>p.Partner.PartnerGuid == id);

            

            var cNumList = new List<string>();

            foreach (var cn in PartnerCNumbers)
            {
                cNumList.Add(Format(cn.cNumber));
            }

            
            ViewData["cNumbers"] = cNumList;
            ViewBag.PartnerGuid = id;
         

            return View(PartnerCNumbers.ToList());
        }
静态字符串格式(字符串编号)
{
如果(cNumber.Length==16 | | cNumber.Length==24)
{
cNumber=Regex.Replace(cNumber,“{8}”,“$0-”;
}
else if(cNumber.Length==28)
{
cNumber=Regex.Replace(cNumber,“{4}”,即“$0”);
}
其他的
{
返回cNumber;
}
cNumber=cNumber.Remove(cNumber.Length-1);
返回cNumber;
}
公共操作结果索引(Guid id)
{
var PartnerCNumbers=db.PartnerCNumbers.Include(p=>p.Partner)。其中(p=>p.Partner.PartnerGuid==id);
var cNumList=新列表();
foreach(合伙人编号中的var cn)
{
cNumList.Add(格式(cn.cNumber));
}
ViewData[“cNumbers”]=cNumList;
ViewBag.PartnerGuid=id;
返回视图(PartnerCNumbers.ToList());
}
在我的视图中,ViewData是一个列表

@model IEnumerable<Models.PartnerCNumbers>

IEnumerable<string> cNumbers= ViewData["cNumbers"] as IEnumerable<string>;

@foreach (var item in Model)
        {
            //int cLength = item.cNumber.Length;

            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Currency)
                </td>
                <td>
                    //@Html.DisplayFor(modelItem => item.cNumber)
                    //THIS IS WHERE I NEED THE FORMATTED cNUMBER
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.sCode)
                </td>
            </tr>
}
@model IEnumerable
IEnumerable cNumbers=视数据[“cNumbers”]为IEnumerable;
@foreach(模型中的var项目)
{
//int cLength=item.cNumber.Length;
@DisplayFor(modelItem=>item.Currency)
//@DisplayFor(modeleItem=>item.cNumber)
//这是我需要格式化的cNUMBER的地方
@DisplayFor(modeleItem=>item.sCode)
}
哪种方法最好?我在视图本身中尝试了String.Format(),但无法转换它,因为它已作为字符串存储在数据库中。
例如,根据长度属性,ViewModel是否可以具有不同的注释?或者,使用javascript是否可能?我会为这种类型的“自定义ToString”创建一个扩展方法


除非每秒调用该函数数千次,“最快的方式”不一定是最好的。

您可以根据需要使用C#中的以下帮助函数按长度格式化输入字符串:

class Program
{
    static string formatByLength(string s)
    {
        if (s.Length == 16)
        {
            return s.Substring(0, 8) + "-" + s.Substring(8);
        }
        if (s.Length == 24)
        {
            return s.Substring(0, 8) + "-" + s.Substring(8, 8) + "-" + s.Substring(16);
        }
        if (s.Length == 28)
        {
            var sb = new System.Text.StringBuilder();
            for (var i = 0; i < 7; i++)
            {
                if (sb.Length > 0)
                {
                    sb.Append(" ");
                }
                sb.Append(s.Substring(i * 4, 4));
            }
            return sb.ToString();
        }

        // return original string
        return s;
    }

    static void Main(string[] args)
    {
        Console.WriteLine(formatByLength("1234567890123456"));
        Console.WriteLine(formatByLength("123456789012345678901234"));
        Console.WriteLine(formatByLength("1234567890123456789012345678"));
    }
}

我将构建一个方法,以获取具有n个固定长度段的字符串长度,然后在以下两者之间插入分隔符:

private static string FormatNumberString(string input, int segmentLength, char delimiter)
{
    StringBuilder builder = new StringBuilder();
    // In a 16-length string, i will initially be 0, and then on the next
    // iteration of the loop it will be 8
    for (int i = 0; i < input.Length; i += segmentLength)
    {
        // if we're just starting another block we should add the delimiter
        if (i != 0)
        {
            builder.Append(delimiter);
        }

        // add the section from i to i + segmentLength (e.g. 0-7 and then 8-15)
        builder.Append(input.Substring(i, segmentLength));
    }
    return builder.ToString();
}
用法:

Console.WriteLine(FormatNumberStringByLength("1234567812345678"));
Console.WriteLine(FormatNumberStringByLength("123456781234567812345678"));
Console.WriteLine(FormatNumberStringByLength("1234123412341234123412341234"));

您应该在foreach循环中使用cNumbers而不是模型

IEnumerable<string> cNumbers= ViewData["cNumbers"] as IEnumerable<string>;

@foreach (var cNumber in cNumbers)
{
            <tr>
                <td>
                    //other model data
                </td>
                <td>
                   @cNumber
                </td>
                <td>
                    //other model data
                </td>
            </tr>
}
IEnumerable cNumbers=ViewData[“cNumbers”]作为IEnumerable;
@foreach(变量cNumber,单位为cNumbers)
{
//其他模型数据
@编号
//其他模型数据
}
IEnumerable<string> cNumbers= ViewData["cNumbers"] as IEnumerable<string>;

@foreach (var cNumber in cNumbers)
{
            <tr>
                <td>
                    //other model data
                </td>
                <td>
                   @cNumber
                </td>
                <td>
                    //other model data
                </td>
            </tr>
}