ASP.Net MVC 3 - Bind Включить / Исключить и проверка - PullRequest
3 голосов
/ 23 августа 2011

Хотя я использую Bind-Include для редактирования только части свойств объекта, проверка для свойств, которые не включены, все еще запускается, состояние моей модели недопустимо после отправки формы.

Вотупрощенная версия моей модели:

public partial class MyObject
{
    public int MyObjectId { get; set; }
    public int personId { get; set; }
    public string myString1 { get; set; }
    public Nullable<int> friend1Id { get; set; }
    public Nullable<int> friend2Id { get; set; }

    public virtual People person { get; set; }
    public virtual People Friend1 { get; set; }
    public virtual People Friend2 { get; set; }
}

И у меня есть контроллер для редактирования только друзей (Friend1 и Friend2) для этого объекта, который выглядит следующим образом:

[HttpPost]
public ActionResult Assignation([Bind(Include = "friend1Id,friend2Id")]MyObject myObject)
{
    if (ModelState.IsValid)
    {
        db.Entry(myObject).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    ViewBag.friend1Id = new SelectList(db.People, "personId", "Name", myObject.friend1Id);
    ViewBag.friend2Id = new SelectList(db.Divisions, "personId", "Name", myObject.friend2Id);
    return View(myObject);
}

На мой взглядУ меня просто есть 2 выпадающих списка для выбора друзей и кнопка Сохранить.Однако когда я нажимаю «Сохранить», моя модель становится недействительной.Если я просматриваю коллекции свойств внутри ModelState, я нахожу сообщение об ошибке, указывающее, что myString1 требуется.myString1 имеет тип nvarchar (100) NOT NULL в базе данных, но я бы подумал, что для этого поля не будет проверки, так как я не включил его в свою привязку.Мое понимание Bind неверно?Пожалуйста, потерпите меня, я новичок в ASP.Net MVC.Я использую MVC 3 и EF 4.1 и строго типизированные представления.

1 Ответ

1 голос
/ 24 августа 2011

Я думаю, что проверка все еще предполагает, что вы хотите работать с действительной моделью. Даже если сейчас вы просто связываете 2 свойства, значения других свойств по умолчанию могут по-прежнему обеспечивать правильную модель. Если вы хотите работать с этой частично недействительной моделью и игнорировать другие поля, вы также можете специально проверить эти два свойства, если вы используете метод IsValidField, в котором вы можете передать имя свойства:

ModelState.IsValidField ("friend1Id") && ModelState.IsValidField ("friend2Id")

Я не совсем понимаю, почему вы получаете такую ​​ошибку проверки, если у вас нет обязательного атрибута для этого свойства. Или это просто усечено в вашем вопросе?

В качестве альтернативы, вы можете иметь класс модели для этого сценария, который имеет только эти 2 поля. Вероятно, лучше было бы описать ситуацию, а также было бы более понятным обновление записи в базе данных (поиск существующего объекта по идентификатору (кстати, откуда в настоящее время происходит идентификатор?) И установка свойств постоянного объекта с помощью Свойства модели, поставляемые с постом. Я все еще задаюсь вопросом, действительно ли код в ветке "if valid" что-то сохранит так, как вы этого ожидаете ...)

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