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

时间:2015-11-20 13:32:47

标签: c# asp.net-mvc razor

我有一个模特:

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代码并且不修改模型?

4 个答案:

答案 0 :(得分:0)

最好在View模型中执行此操作,我的意思是:

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。

答案 1 :(得分:0)

理想情况下,您的viewmodel应该与您实际呈现的表单相对应。主要是Data属于业务逻辑。我:

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 } ;
     }
}

答案 2 :(得分:0)

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

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;
}

答案 3 :(得分:0)

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

<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”和“ 00”,然后可以使用Javascript和JQuery将这些值再次结合在一起。这对我来说很棒。