0

我没有让我所有的文本框验证工作。仅在一次使用“一个”时。我正在尝试对我的变体使用相同的模型属性。有谁知道这个问题的解决方案,或者更好的方法?

@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)
4

2 回答 2

1

您尚未显示完整的代码,但您似乎正在foreach循环渲染它。这将生成重复的id属性(无效的 html)和name属性,因此无论如何它都不会回发到您的集合中。因为名称属性都是一样的,所以关联的验证错误是无法匹配的。更改您的视图以使用for循环(模型必须是IList<T>,或者您可以使用自定义EditorTemplate。注意我不明白您if的声明在做什么(这没有意义),如果您想将值更改为Värde空字符串,如果它的值是0or -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属性(new { Name = "Värde" }无论如何都不会做任何事情)

于 2014-12-01T22:30:50.553 回答
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.

于 2014-12-01T16:49:26.210 回答