即使我没有在 html 中显示,我的模型绑定仍然有效
my model binding is working even If I didn't show it in html
我有一个可以通过不同方式访问的表单。在 URL 中,如果用户使用 ?data=johndoe(示例),我不想处理另一个 属性,所以我没有向用户展示它,我不在乎其中 属性。因为我在用户提交表单时使用相同的表单和相同的控制器,所以我只想在控制器中接收另一个 属性 为 null 然后以不同的方式对待它。
所以
我有一个模型,我初始化并 return 到一个表单,
public class MyModel
{
public int selectedValue {get;set;}
public string data {get;set;}
public MyModel(){
this.selectedValue = 5;
}
}
public ActionResult Index(){
MyModel model = new MyModel(){};
Return View(model);
}
在视图中,我决定不显示 selectedValue 以便在用户提交表单时将其作为空值接收,因此在表单中我只是
@Html.EditorFor(m => m.data)
selectedValue 没有任何内容。
然后在控制器中
[HttpPost]
public ActionResult Index(MyModel model)
{
// here I get model.selectedValue = 5, WHY?
}
我想得到model.selectedValue at null 如果我没有在表单中使用它,看起来很正常,不是吗?
如果正常,为什么以及如何从剃须刀页面解决此问题?
关于如何执行此操作的任何清晰想法?
提前致谢
你得到 5 因为你在构造函数中设置了它
public MyModel(){
// comment this line to get rid of 5
// this.selectedValue = 5;
}
您也不会将其设置为 null
,因为您使用的 int
是一种没有 null
作为值的值类型。您可以使用 nullable int int?
或一些默认值,例如 -1
来指示没有选择。
它不是从表单传递的,但仍会生成 MyModel
的新实例,并且就在您的构造函数中,您将值设置为 5。
public class MyModel
{
public int selectedValue {get;set;}
public string data {get;set;}
public MyModel() {
// MyModel.selectedValue will always be 5 unless specified otherwise
this.selectedValue = 5;
}
}
I want to get model.selectedValue at null
在这种情况下,将您的模型更改为:
public class MyModel
{
public int? selectedValue {get;set;}
public string data {get;set;}
}
如果您不能更改模型(例如第三方),那么您必须在视图中提供一个值 "fix this issue in the razor view"。您可以将其设置为零或其他一些幻数(使用常量...)以指示默认值。
您在构造函数中初始化了变量 selectedValue
。
模型绑定创建实例时,也会调用这个构造函数,也就是说Index
action方法中的变量selectedValue
等于5。
我有一个可以通过不同方式访问的表单。在 URL 中,如果用户使用 ?data=johndoe(示例),我不想处理另一个 属性,所以我没有向用户展示它,我不在乎其中 属性。因为我在用户提交表单时使用相同的表单和相同的控制器,所以我只想在控制器中接收另一个 属性 为 null 然后以不同的方式对待它。
所以
我有一个模型,我初始化并 return 到一个表单,
public class MyModel
{
public int selectedValue {get;set;}
public string data {get;set;}
public MyModel(){
this.selectedValue = 5;
}
}
public ActionResult Index(){
MyModel model = new MyModel(){};
Return View(model);
}
在视图中,我决定不显示 selectedValue 以便在用户提交表单时将其作为空值接收,因此在表单中我只是
@Html.EditorFor(m => m.data)
selectedValue 没有任何内容。
然后在控制器中
[HttpPost]
public ActionResult Index(MyModel model)
{
// here I get model.selectedValue = 5, WHY?
}
我想得到model.selectedValue at null 如果我没有在表单中使用它,看起来很正常,不是吗?
如果正常,为什么以及如何从剃须刀页面解决此问题? 关于如何执行此操作的任何清晰想法?
提前致谢
你得到 5 因为你在构造函数中设置了它
public MyModel(){
// comment this line to get rid of 5
// this.selectedValue = 5;
}
您也不会将其设置为 null
,因为您使用的 int
是一种没有 null
作为值的值类型。您可以使用 nullable int int?
或一些默认值,例如 -1
来指示没有选择。
它不是从表单传递的,但仍会生成 MyModel
的新实例,并且就在您的构造函数中,您将值设置为 5。
public class MyModel
{
public int selectedValue {get;set;}
public string data {get;set;}
public MyModel() {
// MyModel.selectedValue will always be 5 unless specified otherwise
this.selectedValue = 5;
}
}
I want to get model.selectedValue at null
在这种情况下,将您的模型更改为:
public class MyModel
{
public int? selectedValue {get;set;}
public string data {get;set;}
}
如果您不能更改模型(例如第三方),那么您必须在视图中提供一个值 "fix this issue in the razor view"。您可以将其设置为零或其他一些幻数(使用常量...)以指示默认值。
您在构造函数中初始化了变量 selectedValue
。
模型绑定创建实例时,也会调用这个构造函数,也就是说Index
action方法中的变量selectedValue
等于5。