c# - 即使我没有在 html 中显示,我的模型绑定(bind)也能正常工作

标签 c# asp.net asp.net-mvc razor model-binding

我有一个可以通过不同方式访问的表单。在 URL 中,如果用户使用 ?data=johndoe(示例),我不想处理另一个属性,所以我没有向用户显示它,我也不关心这个属性。因为我在用户提交表单时使用相同的表单和相同的 Controller ,所以我只想在 Controller 中将其他属性接收为 null,然后以不同的方式对待它。

所以

我有一个模型,我初始化并返回到一个表单,

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);
}

在 View 中,我决定不显示 selectedValue 以便在用户提交表单时将其作为空值接收,因此在表单中我只是

@Html.EditorFor(m => m.data)

selectedValue 没有任何内容。

然后在 Controller 中

[HttpPost]
public ActionResult Index(MyModel model)
{
// here I get model.selectedValue = 5, WHY?
}

我想获取 model.selectedValue at null 如果我没有在表单中使用它,它看起来很正常,不是吗?

如果正常,为什么以及如何从 Razor 页面修复此问题? 关于如何执行此操作的任何清晰想法?

提前致谢

最佳答案

你得到 5 因为你在构造函数中设置了它

public MyModel(){
    // comment this line to get rid of 5
    // this.selectedValue = 5;  
}

您也不会将其设置为 null,因为您使用 int,它是一种没有 null 的值类型作为值(value)。您可以使用 nullable int int? 或一些默认值,例如 -1 来指示没有选择。

关于c# - 即使我没有在 html 中显示,我的模型绑定(bind)也能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30597431/

相关文章:

asp.net - 创建适合任何屏幕分辨率的母版页

jquery - 在一页中使用 2 个 jquery 第二个 jquery ul 和 li 类和样式得到改变

asp.net-mvc - 将 Glimpse 添加到引用 EF 项目的 MVC 项目的正确方法是什么?

c# - 一键存储Session中的多个值——Session的可能列表

c# - MVC 方法不接收 json 数组作为列表

c# - 如何在 C# 中用索引值替换文本

c# - UIElement.AddHandler() 与 .Event += 定义

c# - 非托管代码是否需要 list 文件?

c# - BeginLifetimeScope/DbContext 的 Autofac 和内存泄漏已被处理/C# asp.net

c# - NopCommerce:如何将此网关的返回字段映射到 Nop 所期望的内容?