首页 新闻 会员 周边

MVC3下UpdateModel可空未填写的参数为Null,为何不是空字符串

0
悬赏园豆:10 [已关闭问题] 关闭于 2012-05-11 11:07

Model

public class RegModel
{
[Required(ErrorMessage="用户名不能为空")]
[StringLength(20, MinimumLength = 2, ErrorMessage = "用户名的长度必须大于2个字符并小于20个字符")]
[Remote("CheckUserAccountExists", "AjaxCheck", ErrorMessage = "用户账号已存在")] // 远程验证(Ajax)
public string UserName { get; set; }

[Required(ErrorMessage="请输入密码")]
[StringLength(12, MinimumLength = 6 ,ErrorMessage = "密码的长度必须大于6个字符并小于20个字符")]
public string PassWord { get; set; }

[Compare("PassWord",ErrorMessage="两次密码输入不一致")]
public string ConfirmPassWord { get; set; }


[Required(ErrorMessage = "请输入联系QQ")]
[RegularExpression(@"^\d{5,11}$",ErrorMessage="请输入正确的QQ号码")]
public string QQ { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
}

View

@model WebSite.Models.RegModel
@using (Html.BeginForm("DoReg", "Home", FormMethod.Post))
{
<ul>
<li>&nbsp;&nbsp;名:@Html.TextBoxFor(x => x.UserName) </li>
<li>登陆密码:@Html.PasswordFor(x => x.PassWord)</li>
<li>确认密码:@Html.PasswordFor(x => x.ConfirmPassWord)</li>
<li>Q Q 号码:@Html.TextBoxFor(x => x.QQ)</li>
<li>联系电话:@Html.TextBoxFor(x => x.Phone)</li>
<li>电子邮箱:@Html.TextBoxFor(x => x.Email)</li>
</ul>
}

Action

  public ActionResult DoReg()
{
RegModel user = new RegModel();
try
{
UpdateModel<RegModel>(user);                 user.Phone //可不填参数为Null,如何为空字符串
            }
catch (InvalidOperationException ex)
{
return View("Reg", user);
}
}


可空参数user.Phone如果在View中没有引用,页面没有回传Phone的值,那么UpdateModel后为null,是可以理解。。
但是在View中已经引用了,页面回传的参数里也有Phone的空字符串值,为何UpdateModel后为null呢?

wuyou331的主页 wuyou331 | 初学一级 | 园豆:101
提问于:2012-01-17 10:30
< >
分享
所有回答(5)
0

看一下你的UpdateModel<RegModel>(user);方法中的代码。你说的为null,是指user对象为null吗?

悟行 | 园豆:12559 (专家六级) | 2012-01-17 11:03
0

希望LZ弄清楚null!="",null是未实例化对象,也就是未分配内存,空字符串是分配内存,值为“”!百度谷歌有巨量资料!

lonely_rain | 园豆:752 (小虾三级) | 2012-01-17 13:24

你说的非常对,我问的就是页面上没有填写的可空属性,UpdateModel后为什么是null,而不是""

支持(0) 反对(0) wuyou331 | 园豆:101 (初学一级) | 2012-01-17 16:43

@wuyou331: 因为你没有实例化对象,无论是值还是地址引用,都是在new之后才开始分配内存的,明白?

支持(0) 反对(0) lonely_rain | 园豆:752 (小虾三级) | 2012-01-17 17:31
0

楼主的问题是如何解决的?我现在遇到和你一样的问题

魔方程 | 园豆:152 (初学一级) | 2012-06-29 16:11
0

查了好久,终于收到原因:

if (bindingContext.ModelMetadata.ConvertEmptyStringToNull && Object.Equals(value, String.Empty)) {
  return null;
}

当Model的元数据ConvertEmptyStringToNull为true,并且form的值为空字串时,返回null.

解决办法就是要在Model的相关属性上设置[DisplayFormat(ConvertEmptyStringToNull = false)]

三聪 | 园豆:139 (初学一级) | 2012-09-05 17:59
0

mvc3 mvc4都有这个问题

 

2个解决办法
1.model的属性上增加Attribute

[DisplayFormat( ConvertEmptyStringToNull = false )]
public string Name
{
get;
set;
}

 

2.定义模型绑定类

aierong | 园豆:203 (菜鸟二级) | 2015-03-13 09:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册