MVC:在多个文本框中从模型中分离字符串

本文关键字:模型 分离 字符串 文本 MVC | 更新日期: 2023-09-27 18:23:42

我有一个模型:

public class Data
{
     public int id { get; set; }
     public string BBBCode { get; set; }
}

部分视图:

<div class="col-md-10">
        @Html.EditorFor(model => model.BBBCode, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.BBBCode, "", new { @class = "text-danger" })
</div>

对于该模型,Visual studio为BBBCode成员创建了一个带有文本框的编辑视图。但我需要将BBBCode分为两个文本框,第一个文本框最多应包含4个字符,第二个文本框应包含其余字符。有没有一种方法可以自动实现这一点,或者不用任何javascript代码,也不用修改模型?

MVC:在多个文本框中从模型中分离字符串

理想情况下,视图模型应该与实际呈现的表单相对应。大多数情况下,如果Data属于业务逻辑。I.e:

public class Data
{
     public int id { get; set; }
     public string BBBCode { get; set; }
}
public class DataViewModel
{
     public DataViewModel() 
     {
     }
     public DataViewModel(Data data) 
     {
          id = data.id ; 
          BBBCodePartOne = ... ; 
          BBBCodePartTwo = ... ; 
     }
     public int id { get; set; }
     public string BBBCodePartOne { get; set; }
     public string BBBCodePartTwo { get; set; }
     public Data ToData() 
     {
         return new Data() { id = id,  BBBCode = BBBCodePartOne  + BBBCodePartTwo } ;
     }
}

最好在视图模型中进行,我的意思是:

public class Data
{
     public static char Separator = '-'; //here is your separator
     public int id { get; set; }
     public string BBBBegin { get; set; }
     public string BBBEnd { get; set; }
     public string BBBCode { get { return BBBBegin + Separator + BBBEnd; } }
}

现在在你的视图中,你总是可以这样做:

<div class="col-md-10">
        @Html.EditorFor(model => model.BBBBegin, new { htmlAttributes = new { @class = "form-control" } })
        @Html.EditorFor(model => model.BBBEnd, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.BBBBegin, "", new { @class = "text-danger" })
        @Html.ValidationMessageFor(model => model.BBBEnd, "", new { @class = "text-danger" })
</div>

当您将其发布到控制器时,您总是可以从BBBCode属性中获得完整的BBBCode。

您应该在模型中使用两个属性。

public class Data
{
     public int id { get; set; }
     public string BBBCode1 { get; set; }
     public string BBBCode2 { get; set; }
}
<div class="col-md-10">
        @Html.EditorFor(model => model.BBBCode1, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.BBBCode1, "", new { @class = "text-danger" })
</div>
<div class="col-md-10">
        @Html.EditorFor(model => model.BBBCode2, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.BBBCode2, "", new { @class = "text-danger" })
</div>

在您的控制器中

public ActionResult Index(Data model){
    var bbcCode = model.BBCCode1 + model.BBCCode2;
}

如果您不想更改模型(无判断)我在输入字段中使用了这两个,其中一个用于值的两个部分:

<div>@Html.TextBoxFor(m => m.Betrag, new { @Value = Model.Betrag.ToString().Split(',').GetValue(0) })</div>
<div>@Html.TextBoxFor(m => m.Betrag, new { @Value = Model.Betrag.ToString().Split(',').GetValue(1) })</div>

这只需将像"15,00"这样的值拆分为"15"answers"00",然后可以使用一些Javascript和JQuery将这些值再次连接在一起。这对我来说很好。