在MVC中提交表单时更改字段值的最佳实践是什么?

时间:2016-03-01 18:46:44

标签: c# asp.net-mvc maskedinput

我的View中有很多字段被jquery MaskedInput屏蔽。它们被掩盖,因为用户需要使用掩码来查看它,但我需要在提交数据库中的值之前删除这些掩码。

我不想搞砸代码,因为这是我项目中最重要的Views之一。

那么最好的做法是什么?

假设我有Model

public class MyViewModel {
    public string MyMaskedProperty { get; set;}
}

此代码位于View

@Html.TextboxFor(x=> x.MyMaskedProperty, new { @class="myMask"} )

我应该:

  1. 在表单被提交之前,使用javascript删除View上的掩码
  2. 移除Model上的模板,更改get的{​​{1}}以返回未屏蔽的值
  3. 删除我MyMaskedProperty上的面具,因为只需要从此处及以后取消屏蔽
  4. 比上述3种解决方案更好。
  5. 提前致谢!

1 个答案:

答案 0 :(得分:4)

类似到第二个选项,您可以简单地向视图模型添加只读字段:

public class MyViewModel {
    public string MyMaskedProperty { get; set;}

    public string MyUnmaskedProperty
    {
        get
        {
            // return an "unmasked" version of MyMaskedProperty
        }
    }
}

即使您要使用JavaScript修改该值,您也无法真正隐含地信任它,并且无论如何都希望验证服务器端。在控制器中执行此操作并不理想,因为这只是需要在整个地方重复的过程代码。遵循“让你的控制器保持轻盈和你的模型沉重”的建议,这个逻辑真的属于模型。

模型本身可以从任何版本的数据构建。只要用于构建模型的信息可以有效地构造它,那么模型就可以暴露各种操作和属性来操纵和查看该信息。