既存のポータルを Web フォームから MVC に再構築していますが、検証に問題があります。私はこのモデルのようなものを持っています:
public class Customer
{
[RequiredIf("FirstNameRequired", true)]
[Display(Name = "First Name")]
public string FirstName { get; set; }
public bool FirstNameRequired { get; set; }
public bool FirstNameVisible { get; set; }
[RequiredIf("LastNameRequired", true)]
public string LastName { get; set; }
public bool LastNameRequired { get; set; }
public bool LastNameVisible { get; set; }
[RequiredIf("EmailRequired", true)]
public string Email { get; set; }
public bool EmailRequired { get; set; }
public bool EmailVisible { get; set; }
}
public class PersonalInfo
{
public Customer PrimaryCustomer { get; set; }
public IEnumerable<Customer> Customers { get; set; }
}
顧客には多くのプロパティがありますが、たとえば 3 つ追加しました (100 など)。多くの連絡先タイプがあり、visible や required などのプロパティが動的であるため、私はこのようにしています。これで、すべての顧客をレンダリングするエディター テンプレートができました。こんな感じです。
@if (Model.FirstNameVisible)
{
<p>
First Name:
@Html.TextBoxFor(x => x.FirstName)
</p>
}
@if (Model.LastNameVisible)
{
<p>
Last Name:
@Html.TextBoxFor(x => x.LastName)
</p>
}
@if (Model.EmailVisible)
{
<p>
Email:
@Html.TextBoxFor(x => x.Email)
</p>
}
これですべての連絡先がレンダリングされますが、モデルにデータを投稿すると REQUIRED および VISIBLE ブール値のプロパティが false になります。これらは私が追加しなかったためです:
@Html.HiddenFor(x => x.FirstNameRequired)
@Html.HiddenFor(x => x.FirstNameVisible)
この検証を追加すると、うまく機能しています。ModelState.IsValid は正しく機能しています。問題は、誰かが非表示の値データを変更し、誤ったデータを挿入できるようになった場合です。どうすればこれを防ぐことができますか?