不应在客户端设置的ViewModel属性(ASP.NET MVC)

时间:2012-03-13 18:09:31

标签: asp.net-mvc deserialization

我有一个带有输入参数的复杂对象的控制器动作,由Post发送。 在一个场景中,我不希望用户提交有效的内容(例如,他按下后退按钮),但我仍然希望保持表单的状态,所以我把它放在Session中。

VM上有一个名为Valid的属性,用于标记模型状态验证的结果以供以后使用。

我不希望用户以某种方式从客户端发送此属性(例如,如果我不小心,将其设置为误报状态可能会混淆我的代码。)

是否有一个属性,比如在这里使用非序列化? (所以我不必在我的代码中将它明确地设置为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);
}

1 个答案:

答案 0 :(得分:0)

您可以使用BindAttribute来控制模型绑定时使用的属性。

[Bind(Exclude="Valid")]
public class MyVm
{
    public bool Valid {get; set;}
}