Можно ли использовать модельную привязку для обновления объекта, когда присутствуют не все значения формы? - PullRequest
0 голосов
/ 13 июля 2011

Я реализую некоторую базовую привязку модели для заполнения объекта, переданного в действие (обычное использование).Первое действие - это метод CREATE, в этом случае я ТРЕБУЕТ, чтобы присутствовали все параметры.

Для этого другого действия, однако, это просто метод UPDATE, в этом случае я приму все значения формы, но я также хочуможно было получить только ОДИН или несколько из них и тем самым обновлять только указанные поля.

Я полагаю, что мне нужно каким-то образом установить для них значение по умолчанию, равное нулю, или "", если значение отсутствует.Однако у меня сложилось впечатление, что привязка модели требует, чтобы ВСЕ параметры были в POST, чтобы разрешить действие, которое принимает этот объект.

Возможно ли это, и я достигаю его, используя тот же объект Model илимне нужно будет сделать «полную версию» и «частичную версию»?

РЕДАКТИРОВАТЬ: Попытка прояснить это:

Прямо сейчас, если у меня есть этоДействие:

public ActionResult MyAction (MyObject obj)

, а объект MyObject имеет 3 переменные: var1, var2 и var3

, тогда, если IPOST to MyAction и включает только var1 и var2, он не будет разрешен, потому что Привязка модели не нашла var3

Однако я хочу, чтобы она работала таким образом!Таким образом, если кто-то хочет опубликовать ТОЛЬКО var1 (вместе с некоторым идентификатором), я могу искать объект в базе данных и UPDATE var1 объекта, оставляя только var2 и var3, я просто пытаюсь выяснить, как получить привязку моделиправильно разрешать при отсутствии значений формы.

1 Ответ

0 голосов
/ 13 июля 2011

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

public ActionResult MyAction([Bind(Include = "Field3,Field4")MyObject myObject)

Обычным случаем обновления подмножества полей является выборка MyObject из полностью заполненной базы данных и вызов UpdateModel с использованиемперегрузка с белым списком полей для обновления.

[HttpPost]    
public ActionResult MyAction()
{
    var myObject = GetMyObjectFromDatabase();
    TryUpdateModel(myObject, string.Empty /* prefix */, "Field3,Field4");
    // myObject now has Field3 and Field4 values from the POST
}
...