0

すべてのテキストボックスの検証が機能していません。一度に「1」を使用している間のみ。バリエーションに同じモデル プロパティを使用しようとしています。これに対する解決策、またはこれを行うためのより良い方法を知っている人はいますか?

@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属性が生成されるため、コレクションにポストバックされません。name 属性がすべて同じであるため、関連する検証エラーを突き合わせることができません。ループを使用するようにビューを変更しますfor(モデルは必要であるIList<T>か、代わりにカスタムを使用できますEditorTemplate。注:ステートメントが何をしているのかわかりません(意味がありません)。値を空ifに変更したい場合Värde文字列の値が0または-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 に答える