Asp.net 无法将类型为{System.Data.Entity.Core.Objects.ObjectResult<;int>;}的对象转换为int-ASP MVC 5
存储过程输出给我一个整数值。我需要将该值传递到视图页面并增加它 控制器:Asp.net 无法将类型为{System.Data.Entity.Core.Objects.ObjectResult<;int>;}的对象转换为int-ASP MVC 5,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,存储过程输出给我一个整数值。我需要将该值传递到视图页面并增加它 控制器: var OrderId = db.USP_SEL_LAST_ORDERID(); ViewData["OrderId"] = (OrderId); 视图: 错误: 与“int.Parse(string)”匹配的最佳重载方法具有一些无效参数 见下文 var orderid = int.Parse(@ViewBag.OrderId.ToString()); 感谢@Wheels73的答案几乎正确,但是您需要知道,存储过程
var OrderId = db.USP_SEL_LAST_ORDERID();
ViewData["OrderId"] = (OrderId);
视图:
错误:
与“int.Parse(string)”匹配的最佳重载方法具有一些无效参数
见下文
var orderid = int.Parse(@ViewBag.OrderId.ToString());
感谢@Wheels73的答案几乎正确,但是您需要知道,存储过程方法以结果集的形式从
DbContext
返回数据,即使它只有一个值。您可以使用FirstOrDefault()
或FirstOrDefault()
方法来确保它返回int
:
控制器
var OrderId = db.USP_SEL_LAST_ORDERID().FirstOrDefault();
ViewData["OrderId"] = OrderId; // ensure this is an integer
查看
var orderid = int.Parse(@ViewBag.OrderId.ToString());
请注意,System.Data.Entity.Core.Objects.ObjectResult
可以有多个值(具有不同的数据类型),因此可以请求第一个int
来获得SP结果。另外,最好使用具有int
属性的强类型viewmodel类,而不是动态ViewBag
或ViewData
:
模型
控制器
public ActionResult ActionName()
{
var model = new ViewModel();
var OrderId = db.USP_SEL_LAST_ORDERID().FirstOrDefault();
model.OrderId = OrderId;
// returns entire viewmodel to view, 'int.Parse' conversion not required
return View(model);
}
类似问题:
这是关于错误的问题吗?如果是,这不是不言自明的吗?是的。我需要知道如何将这个对象类型{System.Data.Entity.Core.Objects.ObjectResult}转换为int 32。我认为这不是您的问题。Parse方法将返回一个int。。请看错误消息…您传递到解析方法中的类型是错误的。那么我应该如何将对象类型为int的ViewBag项强制转换为int?确定。。请参阅下面的答案谢谢您的帮助。但我仍然收到错误:输入字符串的格式不正确。您在ViewBag.OrderID中是否确实有任何内容。这对我来说很管用。是的,我有。SP返回0,并且该值已分配给ViewBag。请问您为什么使用ViewBag而不是视图模型?我假定您在控制器中这样设置ViewBag。ViewBag.OrderID=X
public class ViewModel
{
public int OrderId { get; set; }
}
public ActionResult ActionName()
{
var model = new ViewModel();
var OrderId = db.USP_SEL_LAST_ORDERID().FirstOrDefault();
model.OrderId = OrderId;
// returns entire viewmodel to view, 'int.Parse' conversion not required
return View(model);
}