在 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"} )
我应该:
- 在提交表格之前,使用 javascript 去除我
View
上的面具
- 移除我的
Model
上的掩码,将 MyMaskedProperty
的 get
更改为 return 未掩码的值
- 取下我的
Controller
上的面具,因为它只需要从这里和以后揭开面具
- 比上面 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" 的建议,这个逻辑确实属于模型。
模型本身可以从任何版本的数据构建,真的。只要用于构建模型的信息能够有效地构建它,那么该模型就可以公开各种操作和属性来操纵和查看该信息。
我的 View
中有很多字段被 jquery MaskedInput
屏蔽了。它们被屏蔽了,因为用户需要用屏蔽来查看它,但我需要在将值提交到我的数据库之前删除这些屏蔽。
我不想弄乱代码,因为这是我项目中最重要的代码之一Views
。
那么最好的做法是什么?
假设我有这个 Model
:
public class MyViewModel {
public string MyMaskedProperty { get; set;}
}
View
中的代码:
@Html.TextboxFor(x=> x.MyMaskedProperty, new { @class="myMask"} )
我应该:
- 在提交表格之前,使用 javascript 去除我
View
上的面具 - 移除我的
Model
上的掩码,将MyMaskedProperty
的get
更改为 return 未掩码的值 - 取下我的
Controller
上的面具,因为它只需要从这里和以后揭开面具 - 比上面 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" 的建议,这个逻辑确实属于模型。
模型本身可以从任何版本的数据构建,真的。只要用于构建模型的信息能够有效地构建它,那么该模型就可以公开各种操作和属性来操纵和查看该信息。