4 つの文字列フィールドを持つモデルを宣言します。そのうちの 3 つはフォーム上で読み取り専用です。
public class HomeModel
{
[ReadOnly(true)]
[DisplayName("Service Version")]
public string ServiceVersion { get; set; }
[ReadOnly(true)]
[DisplayName("Session Id")]
public string SessionId { get; set; }
[ReadOnly(true)]
[DisplayName("Visiting from")]
public string Country { get; set; }
[DisplayName("Search")]
public string SearchString { get; set; }
}
モデルにデータを入力した後、モデルをフォームに渡します。
[HttpGet]
public ActionResult Index()
{
var model = new HomeModel
{
Country = "Australia",
SearchString = "Enter a search",
ServiceVersion = "0.1",
SessionId = "76237623763726"
};
return View(model);
}
そして、期待どおりにフォームが表示されます。
<h2>Simple Lookup</h2>
@Html.LabelFor(m=>m.ServiceVersion): @Model.ServiceVersion<br/>
@Html.LabelFor(m=>m.SessionId): @Model.SessionId<br/>
@Html.LabelFor(m=>m.Country): @Model.Country<br/>
<p>
@using(Html.BeginForm())
{
@Html.LabelFor(m => m.SearchString)
@Html.TextBoxFor(m => m.SearchString)
<button type="submit" name="btnSearch">Search</button>
}
</p>
しかし、フォームを送信してフォームからモデルを取得すると、SearchString の値のみが取り込まれます。
[HttpPost]
public ActionResult Index(HomeModel model)
{
return View(model);
}
他のフィールドが「失われた」というのは正しいですか? MVC はモデル クラスの他のメンバーを保持しませんか? そして、これが予想される場合 - これらを再取得する方法はありますか? それとも、データベースに戻ってモデルに古い値を入力し、フォーム モデルから新しい値を使用する必要がありますか?
モデルから「読み取り専用」フィールドを読み戻すことの有効性が疑問視される可能性があります..これは公平ですが、投稿されたデータについて何か疑わしいものを見つけた場合は、画面を再表示したいかもしれません.データベースからデータを再度読み取る必要はありませんか?