Помогите пожалуйста с таким вопросом и не судите строго так как я новичок в MVC: у меня есть модель хранения имен пользователей по ID в моей БД
public class Names
{
public int NameId { get; set; }
public string Username { get; set; }
}
, контролер
[HttpPost]
public ActionResult EditforModel(Names Name)
{
if (ModelState.IsValid)
{
db.Entry(Name).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(Name);
}
добавление и редактирование добавления представления работает хорошо, вопрос о редактировании, которым я пользуюсь
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend> legend </legend>
@Html.EditorForModel()
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
для редактирования моей модели. при попытке перейти в это представление я вижу редактор как для идентификатора, так и для имени пользователя, но если я заполняю идентификатор - у меня ошибка, потому что в БД нет записи с таким идентификатором. Хорошо. Давайте поищем атрибуты, чтобы скрыть редактор. [ScaffoldColumn(false)] — это что-то вроде маркера, отображать ли редактор для Id или нет. применив его к моей модели, у меня есть публикация идентификатора «0» из моего представления. Попробуйте другой атрибут. [ReadOnly(true)] делает поле доступным только для чтения. Но при этом у меня в постинге "0". Изменяя представление, я разместил редакторы для каждого поля в модели.
@Html.HiddenFor(model => model.NameId)
@Html.EditorFor(model => model.Username)
но использовать его опасно, потому что какой-то пользователь может опубликовать неправильный идентификатор через пост-запрос.
Я не могу использовать [ScaffoldColumn(false)] с применением идентификатора в действии [Httppost] контроллера, выполнив поиск соответствующей пользовательской записи в БД, потому что имя было изменено. Я не могу поверить, что @Html.HiddenFor - это единственный выход.но не могу найти :(