У меня есть сценарий, когда мне нужно обновить объект из информации, которая была отправлена в действие. Пока информация находится на странице, это работает отлично. Тем не менее, это требует, чтобы я помещал информацию в скрытые поля, если я не хочу, чтобы модельное состояние жаловалось.Использовать TryUpdateModel для привязки частично поставленных значений
В качестве примера, предположим, что я использую ниже класс как модель:
public class Client
{
[Required]
public string Name { get; set; }
public string Email { get; set; }
public int Id { get; set; }
}
Если я не хочу, чтобы пользователь изменить имя, мне нужно, чтобы включить его в скрытое поле что он привязан к модели и проходит проверку.
Проблема, которая возникает у меня, это, очевидно, небезопасно, если она используется с более конфиденциальной информацией. Так что я попытался это:
public virtual ActionResult Save(Client model, int clientId)
{
var client = datasource.LoadEntity(adapter, clientId); // clientId is passed as a querystring to the action
if (!TryUpdateModel(client))
return new RedirectResult('The edit page URL');
}
Проблема заключается в том, что до сих пор ModelState жалуется на значение «Имя» не доступны, даже если он был загружен на объект клиента из базы данных.
Очевидно, что я делаю что-то неправильно, но я не могу понять, что.
Если вы обеспокоены безопасностью, вы действительно должны использовать SSL для защиты связи между клиентом и сервером. Причина жалобы на структуру заключается в том, что валидация происходит непосредственно перед действием, выполняемым во время привязки к модели, то, что вы пытаетесь сделать, слишком поздно. –
@ChrisHardie Я действительно использую решение, которое можно найти здесь: http://stackoverflow.com/questions/9604049/asp-net-mvc-3-validation-exclude-some-field-validation-in-tryupdatemodel?rq=1 который делает именно то, что я хочу. –