Я объявляю модель с 4 строковыми полями. 3 из которых предназначены только для чтения на форме:Модели MVC не сохраняются в форме
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 других членов класса модели? И если это ожидается - есть ли способ их получить? Или мне нужно вернуться к моей базе данных, заполнить модель старыми значениями, а затем использовать новые значения из модели формы?
Возможно, что вопрос о том, что вы хотите прочитать поля «только для чтения» от модели, ставится под сомнение. Это справедливо, но в случае, если я нахожу что-то подозрительное в отношении опубликованных данных, возможно, показать экран и не перечитывать данные из базы данных еще раз?
[ReadOnly (true)] означает, что свойство является readonly и, следовательно, не будет привязано к значениям, отправленным обратно –