多个textboxfor,相同型号。 ValidationMessageFor不工作

时间:2014-12-01 16:35:36

标签: asp.net-mvc html.textboxfor validationmessage

我没有让所有文本框的验证工作。只有在使用" one"一次。 我尝试对我的变体使用相同的模型属性。有没有人知道这个的解决方案,或者更好的方法呢?

@Html.Hidden("AggKPIID", item.AggKPIID)
@if (item.Värde.ToString() == "-1" || item.Värde.ToString() == "0")
{                   
  @Html.TextBoxFor(modelItem => item.Värde, new { Value = "", Name = "Värde", @class = "kpiTextbox kpiTextbox-edit", @id = "tb"+Id })
  <br />
  @Html.ValidationMessageFor(modelItem => item.Värde)
}
else
{
  @Html.TextBoxFor(modelItem => item.Värde, new { @class = "kpiTextbox kpiTextbox-edit", @id = "tb" + Id })
  <br />
  @Html.ValidationMessageFor(modelItem => item.Värde)
}    
@Html.Hidden("Tidsperiod", item.Tidsperiod)
@Html.Hidden("Id", Id)

2 个答案:

答案 0 :(得分:1)

您尚未显示完整的代码,但似乎您在foreach循环中呈现此内容。这将生成重复的id属性(无效的html)和name属性,因此无论如何它都不会回发到您的收藏集。由于名称属性都相同,因此无法匹配关联的验证错误。更改您的视图以使用for循环(模型必须为IList<T>,或者您可以使用自定义EditorTemplate。请注意,我不了解您{{1} }语句正在做(没有意义),如果你想将if的值改为空字符串,如果它的值是Värde0,那么你可以在将模型传递给视图之前的控制器。

-1

并且始终使用强类型助手,并且不要尝试更新for(int i = 0, i < Model.Count; i++) { @Html.HiddenFor(m => m[0].AggKPIID) @Html.TextBoxFor(m => m[0].Värde, new { @class = "kpiTextbox kpiTextbox-edit" }) @Html.ValidationMessageFor(m => m[0].Värde) @Html.HiddenFor(m => m[0].Tidsperiod) @Html.HiddenFor(m => m[0].Id) } 属性(不是name无论如何都会做任何事情)

答案 1 :(得分:0)

你应该只能定义一次

@{var attrs = null;}
@if (item.Värde.ToString() == "-1" || item.Värde.ToString() == "0")
{
    attrs = new { Value = "", @class = "kpiTextbox kpiTextbox-edit", @id = "tb" + Id };
}
else
{
    attrs = new { @class = "kpiTextbox kpiTextbox-edit", @id = "tb" + Id };
}
@Html.TextBoxFor(modelItem => item.Värde, attrs)
<br />
@Html.ValidationMessageFor(modelItem => item.Värde)

我也不建议设置Name