在这行代码中
<% var tmp = int.Parse(ViewData["numOfGroups"].ToString()); %>
我有错误:Object reference not set to an instance of an object
。如何正确转换
ViewData["numOfGroups"]
到int
?
答案 0 :(得分:5)
首先应确保控制器操作正在设置此变量:
public ActionResult Index()
{
ViewData["numOfGroups"] = "15";
return View();
}
完成此操作后,您将不再获得NullReferenceException
并且您的代码应该可以运行。
当然,由于我已在此处多次编写,因此您应该更喜欢强类型视图而不是ViewData
。您还应该相应地键入模型属性。解析字符串不是视图的责任。所以:
public ActionResult Index()
{
var model = new MyModel
{
NumOfGroups = 15
};
return View(model);
}
在你看来:
<% var tmp = Model.NumOfGroups; %>
顺便说一下,这也应该避免,因为我觉得你在视图中声明了变量,这意味着你有意使用它们。视图不是用于声明变量和编写C#代码。它们是标记。
答案 1 :(得分:1)
如果错误与将ViewData["numOfGroups"]
转换为int相关,那么您将获得FormatException。检查您是否确实将数据传递给视图,并且它包含numOfGroups
密钥。
答案 2 :(得分:0)
似乎ViewData["numOfGroups"]
为空。问题很可能不在转换本身,而在于ViewData["numOfGroups"].ToString()
。
答案 3 :(得分:0)
由于ViewData字典包含<string, object>
,您必须对值进行拆箱:
int tmp = (int)ViewData["numOfGroups"];
但如果转换无法正常工作,请检查对象是否为空,或者通过try / catch进行环绕...
...或者如果转换成功,则使用返回bool的TryParse()
。