1

以下のようなビューを作成しました。

<%for (var i = 0; i < Model.customerCDTO.Count();i++)
  {%>
  <tr>
     <td style="text-align: center; width: 10%;" class="table-content-middle">
     <%if (Model.customerCDTO[i].Active == true)
      {%>
      <%=Html.CheckBoxFor(m=>m.customerCDTO[i].Active)%>
      <%}
      else
      { %>
      <%=Html.CheckBoxFor(m => m.customerCDTO[i].Active)%>
    <%} %>
     </td>
     <td class="table-content-middle" align="center" style="width: 80%;">
     <%=Html.DisplayTextFor(m=>m.customerCDTO[i].Name)%>
     </td>
     </tr>
 <%} %>

上記のビューの問題は、customerCDTO[i].Name に null の値を与えていることです。

以下は私のビューモデルです

public class CustomerVM
{
public List<CustomerCDTO> customerCDTO { get; set; }
}

上記のビュー モデルでは、List プロパティを作成しました。CustomerCDTO クラスの定義は次のとおりです。

public class CustomerCDTO
{
public string Name { get; set; }
public bool Active { get; set; }
public bool? IsChecked { get; set; }
}

助けてください。

ありがとう

4

2 に答える 2

2

プロパティに対応する要素nullがフォームに含まれていないため、値が表示されます (ソースを表示するとすぐにわかります)。この理由は、そもそもそのような要素を作成することを想定していないためです。<input>NameDisplayTextFor

ほとんどの場合Html.HiddenFor、入力要素を作成するも呼び出すことは悪い考えです。

<td class="table-content-middle" align="center" style="width: 80%;">
    <%=Html.DisplayFor(m=>m.customerCDTO[i].Name)%>
    <%=Html.HiddenFor(m=>m.customerCDTO[i].Name)%>
</td>

これで問題は解決しますが、ユーザーは Firebug などのツールを使用して値を編集し、 の値を変更するだけでName済みます<input>。(注: 私も に変更DisplayTextForDisplayForました。一般的には、これがより正しい方法です)。

しかし、その後何をすべきか?まあ、ここには魔法の解決策はありません。フォームに含まれていない場合はNameなりますがnull、含まれている場合(非表示であっても)、ユーザーは自由に変更できます。それが問題である場合、唯一のオプションは、バックエンド コードを変更してデータ ストアから入力することです。NameName

于 2012-05-09T10:50:07.690 に答える
0

データベースに対してクエリを実行した後、リストに目的のデータが入力されていることを確認してください。実際、データが適切に入力されていないようです。

于 2012-05-09T10:44:53.387 に答える