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

What is the best pratice to change a field value when a form is submitted in MVC?

我的 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 上的掩码,将 MyMaskedPropertyget 更改为 return 未掩码的值
  3. 取下我的 Controller 上的面具,因为它只需要从这里和以后揭开面具
  4. 比上面 3 种解决方案更好的东西。

提前致谢!

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

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

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

即使您要使用 JavaScript 修改该值,您也不能真正隐含地相信它并且无论如何都希望验证服务器端。在控制器中执行此操作并不理想,因为那只是需要在所有地方重复的过程代码。按照 "keep your controllers light and your models heavy" 的建议,这个逻辑确实属于模型。

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