我有一个模特:
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代码并且不修改模型?
答案 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将这些值再次结合在一起。这对我来说很棒。