Я бы посоветовал вам избегать использования TryUpdateModel в целом.
В репозитории обычно есть метод обновления, который устанавливает модификацию entityState перед вызовом Save (), я не вижу этого в приведенном выше коде.
Если ваша цель состоит в том, чтобы отобразить запись и разрешить сохранение только даты, то создайте представление для этой модели и визуализируйте поля с:
. Устанавливает модель для представления:
@model YourNamespace.Models.Assessment
@Html.DisplayFor(model=>model.propertyToDisplay)
на элементах, которые вы хотите отобразить, и
@Html.EditorFor(model=>model.Date)
В вашем контроллере действий вы берете свойства, которые хотите связатьв качестве входных параметров:
Отредактировано
class Assessment
{
public int Id { get; set; }
public DateTime Date { get; set; }
//Other properties
}
public ActionResult Edit(int Id, DateTime Date)
{
var assessment = elearningrepository.GetAssessment(id);
assessment.Date = Date;
elearningrepository.UpdateAssessment(assessment);
elearningrepository.Save();
//Redirect to action Detail
}
В этом случае связыватель модели должен просто привязать Id и Date, поэтому даже если кто-то пытается опубликовать другоезначений (редактирование html-формы легко), параметры в ActionResult должны быть названы точно так же, как в модели, и использовать их для выборки и обновления сущности.
Вы должны проверить, что пользователь действительно может получить доступ и отредактировать это.d или в качестве альтернативы используйте Кодекс безопасности MVC , чтобы проверить, что параметр Id не был подделан.его действительно легко и удобно использовать, но это другое обсуждение.
В качестве альтернативы вы можете использовать такой атрибут, как описано в этом блоге , но я этим не пользуюсья:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create( [Bind(Include="Id,Date")] Assessment assessment)