Работа с выбранными полями модели в виде в Razor - PullRequest
0 голосов
/ 23 марта 2012

В моем приложении есть класс Student, как показано ниже:

public class Student
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string RoleNum { get; set; }
    public DateTime RegistrationDate { get; set; }
    public DateTime AdmissionDate { get; set; }
}

Теперь у меня есть несколько представлений в приложении, которые обновляют модель студента.Но не каждое представление должно обновлять каждое поле таблицы ученика в базе данных.например, дата регистрации устанавливается только один раз, когда студент впервые создается.Теперь редактировать представление ученика не должно снова обновлять RegistrationDate.

Проблема в том, что RegistrationDate является обязательным полем в базе данных, поэтому, если он не включен в форму представления, генерируется исключение NULL в RegistrationDate.

Поэтому, чтобы предотвратить это, я скрываю поля RegistrationDate в элементе div, чтобы он не отображался в форме.Это правильный способ сделать это или я упускаю очень простой способ?

Ответы [ 2 ]

0 голосов
/ 23 марта 2012

При обновлении сущности идея состоит в том, чтобы сначала извлечь сущность из базы данных, которую вы хотите обновить, используя идентификатор, а затем использовать метод TryUpdateModel, чтобы обновить только те поля, которые были частью исходного запроса, и, наконец, сохранить модель.

Вот обычно используемый шаблон для обновления сущности:

[HttpPost]
public ActionResult Update(int id)
{
    Student student = Repository.GetStudent(id);
    if (!TryUpdateModel(student))
    {
        // there were validation errors => redisplay the view
        return View(student);
    }

    // the model is valid => at this stage we could save it
    Repository.Update(student);
    return RedirectToAction("success");
}
0 голосов
/ 23 марта 2012

Вместо того, чтобы прятать их ... просто сделайте их скрытым полем:

@Html.HiddenFor(model => model.RegistrationDate)

Или другой вариант - просто использовать Hidden for Student ID, и как только вы отправите данные на сервер (RegistrationDate будет иметь значение null) ... вы можете получить Student из базы данных и заполнить значения, которые у вас есть null .

Второй вариант немного более безопасен, так как пользователь не может изменить дату регистрации в скрытой на стороне клиента.

Пожалуйста, проверьте этот вопрос, очень хорошо объяснил.

...