/*十有三博客*/
  • 首页
  • 关于本站
  • 网站地图
  • RSS订阅

奇怪的问题:ASP.NET MVC submit提交表单传入的模型实体对象为null和空值

2014-11-21 十有三 3 浏览:1万+ .NET技术 ASP.NET MVC

前些天写代码的时候脑子突然短路了,遇到了一个纠结无比又奇怪的问题。在自己的ASP.NET MVC项目中,点击表单提交按钮submit提交数据,服务器后台方法总是接收不到表单提交上来的模型实体对象,显示为null或者空值。


首先具体的描述下我遇到的问题,在ASP.NET MVC的视图页面中,有个表单可以提交数据字段到后台控制器中,控制器接收提交字段数据的参数是一个模型实体对象。但是控制器始终无法获取到表单所提交的模型实体对象,参数对象一直为null值,编译器并没有报错,而且所提交的参数实体对象的字段名称也都正确,但是就是死活无法获取视图中表单所提交的字段。

视图中表单提交到控制器的类:

/// <summary>
/// 搜索实体
/// </summary>
public class SearchViewModel
{
    /// <summary>
    /// 搜索条件
    /// </summary>
    public string Search { get; set; }

    /// <summary>
    /// 当前页码
    /// </summary>
    public int Page { get; set; }
}

具体前端部分代码如下:

@using(Html.BeginForm("Index","Home",FormMethod.Post))
{
    <label>搜索内容:</label>        
    <input type="text" name="Search"/>
    <label>当前页数:</label>
    <input type="text" name="Page" value="1"/>
    <input type="submit" value="搜索"/>
} 

控制器代码如下:

[HttpPost]
public ActionResult Index(SearchViewModel search)
{
    return View(search);
}

然后我们在页面表单中输入相关数据,点击提交:

视图输入界面

在后台断点调试,发现接收的实体对象始终为空:

ASP.NET MVC 控制器Action方法实体参数始终为null值

后来纠结了老半天,出去散完步回来问题就解决了。

造成这个问题的主要原因是因为在MVC的表单提交字段中 ,所提交的Search字段和在控制器中的SearchViewModel实体参数search命名一样,由于MVC中表单提交的参数是不区分大小写的,在加上对应的类型不一样(Search字段为string类型,search对象为SearchViewModel实体类),因此命名冲突加上参数类型冲突导致MVC无法正确区别提交的数据。

在上面的代码中我们可以看到SearchViewModel实体类中有个Search属性,在视图界面中我们这个表单字段的文本输入控件代码:<input type="text" name="Search"/>。

那么问题来了,看下控制器的接受的实体参数:SearchViewModel search。在视图中表单的Search字段所提交上去的是一个string类型的字段,但是我们在控制器中Action方法的search却是一个实体对象,所以命名一样导致始终无法正确区分参数类型,所接受到的参数对象就一直为null值了。

要解决这个问题要么修改SearchViewModel类的Search属性命名,要么修改控制器中Action方法的参数命名。建议修改Action方法的参数命名,最终我控制器的代码如下:

[HttpPost]
public ActionResult Index(SearchViewModel searchViewModel)
{
    return View(searchViewModel);
}

 


作者:十有三

出处:https://shiyousan.com/post/635521286210598952

版权声明:本文采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。欢迎转载本文,转载请声明出处或保留此段声明。


  • 上一篇: ASP.NET 在.aspx页面中使用<script runat="server"></script>标记
  • 下一篇: Discuz!NT Flash无法上传头像,点击上传后无任何反应

相关文章
  • C# string转换成DateTime?(字符串转换成可空日期类型)
  • ASP.NET MVC 获取及手动更新AntiForgeryToken防伪标记
  • Visual Studio 2013 社区版和速成版之间的区别
  • ASP.NET MVC AJAX调用没有反应和返回结果
  • C#中ADO.NET如何传递和设置like查询的参数
  • ASP.NET MVC中MvcHtmlString类的两个疑问:是什么以及怎么使用?

文章分类

.NET技术 123 数据库 24 Web前端 21 网站建设运维 37 操作系统与应用 66 程序猿日常 11 开发工具 12 其他随笔 13

文章标签

ASP.NET ASP.NET MVC C# CSS HTML IIS Javascript Linux MongoDB MySql SQL SQL Server Visual Studio Windows系统 版本控制系统 插件工具 服务器 搞笑娱乐 好文分享 软件应用 生活知识 手机问题 随笔 网络知识 网站设计优化 网站维护 养生保健 异常处理 硬件设备 游戏攻略

热门文章

  • IIS8如何安装和使用URL重写工具-URL Rewrite
  • 林蛋大与楚中天,朱肚皮与朱月坡
  • 解决IE11安装升级失败和在安装前需要更新的问题
  • Windows Server 2012无法安装 .NET3.5-安装角色或功能失败,找不到源文件
  • VS重构重命名的快捷键

推荐文章

  • IIS8如何安装和使用URL重写工具-URL Rewrite
  • ASP.NET MVC网站发布后出现“/”应用程序中的服务器错误。
  • ASP.NET MVC 页面静态化操作的思路
  • System.Data.SqlClient.SqlError: 尚未备份数据库的日志尾部
  • Windows Server 2012 R2 更改计算机管理员账号提示“出现扩展错误,未能保存本地策略数据库”

友情链接

  • Passingwind的博客
  • 码友网

知识共享许可协议 CC BY-SA 4.0本站作品采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。
闽ICP备15003702号
闽公网安备 35020302035102号