asp.net mvc3 UpdateModel исключить свойства не работает - PullRequest
2 голосов
/ 17 марта 2012

У меня есть класс, который имеет 8 реквизитов / 8 столбцов в БД. Но на странице редактирования я не хочу показывать поле AddedDate или UserID, так как я не хочу, чтобы пользователь изменил его.

public class Voucher
{
    public int ID { get; set; }
    public string Title { get; set; }
    public string SiteName { get; set; }
    public string DealURL { get; set; }
    public DateTime AddedDate { get; set; }
    public DateTime? ExpirationDate { get; set; }
    public string VoucherFileURL { get; set; }
    public Guid UserID { get; set; }
}

Вот что у меня есть для контроллера Edit:

// POST: /Voucher/Edit/5

[HttpPost]
public ActionResult Edit(Voucher voucher)
{
    if (ModelState.IsValid)
    {
        string[] excludeProperties = { "AddedDate", "UserID" };
        UpdateModel(ModelState, "", null, excludeProperties);


        db.Entry(voucher).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(voucher);
}

На странице «Правка» после нажатия кнопки «Отправить» я получил следующую ошибку: System.Data.SqlServerCe.SqlCeException: при преобразовании в datetime произошло переполнение.

Похоже, добавленная дата не была исключена из модели представления и вызвала ошибку.

Пожалуйста, дайте мне знать, как это исправить? Спасибо!

public ActionResult Edit([Bind(Exclude = "AddedDate")]Voucher voucher)

тоже не повезло

1 Ответ

1 голос
/ 17 марта 2012

Вы все еще передаете ваучер, который может содержать это поле в нем.Я не уверен, что вы пытаетесь сделать с помощью UpdateModel, если вы уже передаете объект ваучера?Перейдите в ваучер, установите его для изменения и сохраните его.Если вы хотите использовать что-то в базе данных, вам придется

  1. загрузить объект из базы данных
  2. UpdateModel и исключить свойства
  3. сохранить вашу сущность.

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


public class Voucher
{
    public int ID { get; set; }
    public string Title { get; set; }
    public string SiteName { get; set; }
    public string DealURL { get; set; }
    public DateTime? ExpirationDate { get; set; }
    public string VoucherFileURL { get; set; }
    public Guid UserID { get; set; }
}

, а затем загрузить свой объект из БД ":


var voucher = db.Vouchers.Where(o=>o.ID==voucherViewModel.Id);
//manually copy the fields here then save it
//copy
db.SaveChanges();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...