0

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 はモデル クラスの他のメンバーを保持しませんか? そして、これが予想される場合 - これらを再取得する方法はありますか? それとも、データベースに戻ってモデルに古い値を入力し、フォーム モデルから新しい値を使用する必要がありますか?

モデルから「読み取り専用」フィールドを読み戻すことの有効性が疑問視される可能性があります..これは公平ですが、投稿されたデータについて何か疑わしいものを見つけた場合は、画面を再表示したいかもしれません.データベースからデータを再度読み取る必要はありませんか?

4

1 に答える 1