2012-03-13 2 views
0

У меня есть действие контроллера со сложным объектом для входного параметра, который отправляется почтой. В сценарии я бы не хотел, чтобы пользователь отправлял что-то действительное (например, он нажал кнопку «Назад»), но я все еще хочу сохранить состояние формы, поэтому я поместил ее в сеанс.Свойство ViewModel, которое не должно быть установлено на стороне клиента (ASP.NET MVC)

В VM есть свойство, называемое Valid, для маркировки результата проверки состояния модели для последующего использования.

Я бы не хотел, чтобы пользователь каким-то образом отправил это свойство из clientide (например, установив его в ложное положительное состояние, может смутить мой код, если я не буду осторожен).

Есть ли атрибут, например, несериализуемый, который будет использоваться здесь? (Поэтому мне не пришлось бы явно указывать его в false в моем коде).

Часть моего кода (большинство из них сорвет)

[HttpPost] 
public ActionResult FormWithDelayedValidation(MyVM vm) 
{ 
    SessionVariables.Current.OrderSecondVM = vm; 

    if (ModelState.IsValid) 
    { 
     vm.Valid = true; 
     return Redirect(somewhere); 
    } 

    if (vm != null) vm.Valid = false; 
    return Redirect(somewhere_else); 
} 

ответ

0

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

[Bind(Exclude="Valid")] 
public class MyVm 
{ 
    public bool Valid {get; set;} 
} 
Смежные вопросы