首页 新闻 会员 周边 捐助

MVC报错的问题

0
[已解决问题] 解决于 2014-09-22 08:39

大概执行过程是这样的,我一开始访问Send页面,Send页面的Model类型为SmsRecord,然后Send页面提交到[HttpPost] Send() 方法里面,Send() 方法再返回到 Send页面,但是没有传递Model,按理说应该在Send页面使用Model的时候报空引用异常,但是现在报错的位置不在我预想的位置,发上代码和截图,大家帮忙看看,我想知道为什么下面那一行代码那里会报错,谢谢大家了。

Controller:  

      public ActionResult Send()
        {            
            SmsRecord smsConfig = new SmsRecord()
            {
                ObjectId = 123,
                Phone = "15101101111",
                DataSource = 1,
                SmsContent = string.Empty
            };            
            ViewData.Model = smsConfig;
            return View();
        }

        
        [HttpPost]
        public ActionResult Send(string name)
        {            
            SmsRecord smsConfig = new SmsRecord()
            {
                ObjectId = 0,
                Phone = string.Empty,
                DataSource = 0,
                SmsContent = string.Empty
            };
            return View();
        }

View:

@model SmsRecord

@{
    Layout = null;
    var errorInfo = ViewData["error"] ?? string.Empty;
}

        <form action="/Result/Send" method="POST">                     
           <input type="text" name="name" value="@Model.Phone"  readonly="readonly"/>
           <input type="submit" value="发送" />
        </form>

 

 

问题补充:

我第一次运行是不会报错的,errorInfo的值为空,提交之后再返回Send页面就会报错,大神们,都说说想法啊。在线等,急急急!

var errorInfo = ViewData["error"] ?? string.Empty;

我后台没有给ViewData["error"]赋值,他应该为null对吧,如果他为null的话,我这句代码的执行结果应该是errorInfo="";,可是现在执行[HttpPost]Send方法返回视图的时候他报错了,为什么?

晓菜鸟的主页 晓菜鸟 | 老鸟四级 | 园豆:2594
提问于:2014-09-12 11:10
< >
分享
最佳答案
0

谢谢各位园友的回答,这个问题我暂时还没有搞清楚,我下去再试一试,等忙完手头上的活再来提问,谢谢大家了!

晓菜鸟 | 老鸟四级 |园豆:2594 | 2014-09-22 08:39

其实这个错误根本不是由var errorInfo = ViewData["error"] ?? string.Empty;产生的空引用异常,而是在我第二次返回视图的时候,没有给视图所需的Model,所以产生了空引用异常,至于为什么在var errorInfo = ViewData["error"] ?? string.Empty;这一行报错,是因为在视图中我指定了Model的类型,@model SmsRecord,视图中有用到了Model里面的值,从而产生的空引用异常,又因为var errorInfo = ViewData["error"] ?? string.Empty;这句代码会在前面执行,所以VS就提示这句代码发生了异常,其实不是因为这句代码本身发生的异常,如果你删除了这句代码,那么VS就会报Layout = null;这句代码发生异常,如果把Layout = null;这句代码也删除,那么VS会在返回到视图之后直接报异常。

 

晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-10-13 10:30
其他回答(8)
0

能不能把报错的截图发下?

KoalaWang | 园豆:138 (初学一级) | 2014-09-12 13:31

最下面不是错误截图吗?

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-09-12 14:58
0

var errorInfo = ViewData["error"] ?? string.Empty;

没见过这样写的,

string errorInfo= ViewData["error"]  == null ? string.Empty;

BestNow | 园豆:212 (菜鸟二级) | 2014-09-12 14:33

还有你这个ViewData["error"]  没有地方赋值过吗?

支持(0) 反对(0) BestNow | 园豆:212 (菜鸟二级) | 2014-09-12 14:34

?? 是对象为null的时候给默认值。

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-09-12 14:59

@过山车: 我这个例子删减过,但是就是我发出来的代码也会报这个错。

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-09-12 15:00
0

var errorInfo = ViewData["error"] ?? string.Empty;

这样子写貌似会直接把ViewData["error"] ToString,你没赋值,所以会报错。

王者永乐 | 园豆:29 (初学一级) | 2014-09-12 15:00

但是我第一次运行的时候也会走这个啊,他就不会报错。

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-09-12 15:07
0

null

骑着蜗牛耍流氓 | 园豆:135 (初学一级) | 2014-09-12 17:33

我知道 ViewData["error"] 是null,但是我不是处理了吗,为什么还报错?

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-09-12 18:08
0

你只是默认给了一个值  并没有处理为空的情况呀

道友,请留步 | 园豆:202 (菜鸟二级) | 2014-09-12 21:41

为空没关系啊,我的errorInfo可以为空啊。

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-09-13 09:37
0

ViewData["error"]你在后台没有给值,都没有传到前台过去,怎么取?

Halower | 园豆:1723 (小虾三级) | 2014-09-13 22:15

我不是这样写的吗?var errorInfo = ViewData["error"] ?? string.Empty;

我后台没有给ViewData["error"]赋值,他应该为null对吧,如果他为null的话,我这句代码的执行结果应该是errorInfo="";,可是现在执行[HttpPost]Send方法返回视图的时候他报错了,为什么?

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-09-15 08:11

@晓菜鸟: 当然不行,前部分也是隐含的进行了ViewData["error"]==null的判断,就已经报错了

支持(0) 反对(0) Halower | 园豆:1723 (小虾三级) | 2014-09-15 13:02

@Halower: 第一:ViewData["error"]==null 怎么会报错?

第二:我在Send()  [HttpPost] 方法里面给ViewData["error"]赋值了还是报同样的错,怎么解释?ViewData["error"] = "晓菜鸟";

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-09-15 14:34

@晓菜鸟:ViewData["error"] = "晓菜鸟";你要写在[HttpGet]里面传到页面,再由页面提交到[HttpPost]

支持(0) 反对(0) Halower | 园豆:1723 (小虾三级) | 2014-09-15 14:53

@Halower: 我想知道的是var errorInfo = ViewData["error"] ?? string.Empty;为什么会报错?你的意思是不是说我这个ViewData["error"] 没赋值所以报错对吗?但是我在[HttpGet]里面也没有赋值,但是运行完全没问题,为何我从[HttpPost]方法里面返回Send视图这句代码就报错了?

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-09-15 15:23

@晓菜鸟: 我在你邮箱留了我的qq,晚上远程给你说吧,感觉你不理解我的意思。

支持(0) 反对(0) Halower | 园豆:1723 (小虾三级) | 2014-09-15 17:09

@Halower: 嗯,好的。

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-09-15 20:19

@Halower: 昨天晚上网卡卡的,不好意思啊!

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-09-16 08:04
0

ViewData["Model"] 和ViewBag.Model是不一样的。

cshtml中的报错信息不是很准确,建议检查 aaa == null

爱上老鼠的pug | 园豆:60 (初学一级) | 2014-09-14 04:06

可是我没有使用ViewBag啊!求指教。

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-09-15 08:13

@晓菜鸟:  

ViewBag.Model = new { ID=1, Name= 2 };

ViewData["Model"] = new object();

ViewData.Model = new object();

支持(0) 反对(0) 爱上老鼠的pug | 园豆:60 (初学一级) | 2014-09-15 22:00

@爱上老鼠的pug: ???什么意思?不太明白。

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-09-16 08:03

@晓菜鸟: 使用前先赋值。你下面的HTML中有一个NULL值的地方,报错了。显示在C#代码的最后一行。

支持(0) 反对(0) 爱上老鼠的pug | 园豆:60 (初学一级) | 2014-09-19 15:56

@爱上老鼠的pug: 你们都是这么说,但是我还是不理解,我先去看看吧,谢谢了!

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-09-22 08:38
0

ViewData["error"]没赋值,所以报错啦

wongdavid | 园豆:394 (菜鸟二级) | 2014-09-16 16:12

var errorInfo = ViewData["error"] ?? string.Empty;

我后台没有给ViewData["error"]赋值,他应该为null对吧,如果他为null的话, ViewData["error"] ?? string.Empty 我这句代码的执行结果应该是errorInfo="";,可是现在执行[HttpPost]Send方法返回视图的时候他报错了,为什么?

支持(0) 反对(0) 晓菜鸟 | 园豆:2594 (老鸟四级) | 2014-09-16 17:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册