/ / Не може да конвертира обект от тип {System.Data.Entity.Core.Objects.ObjectResult <int>} в int - ASP MVC 5 - asp.net, asp.net-mvc

Не може да преобразува обект от тип {System.Data.Entity.Core.Objects.ObjectResult <int>} в int - ASP MVC 5 - asp.net, asp.net-mvc

Изходът на съхранената процедура ми дава цяло число. Трябва да предам тази стойност на страницата за показване и да я увелича.

контролер:

var OrderId = db.USP_SEL_LAST_ORDERID();
ViewData["OrderId"] = (OrderId);

Изглед:

var orderid = int.Parse(@ViewBag.OrderId);

грешка:

Най-добрият начин на претоварване за "int.Parse (string)" има някои невалидни аргументи

Отговори:

0 за отговор № 1

Виж отдолу.

  var orderid = int.Parse(@ViewBag.OrderId.ToString());

Благодаря


0 за отговор № 2

Отговорът на @ Wheels73 е почти прав, но трябва да знаете, че методът на съхранената процедура връща данни от DbContext под формата на набор от резултати, дори има само една стойност. Можете да използвате и двете FirstOrDefault() или FirstOrDefault<int>() метод, който да гарантира, че се връща 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<T> може да има няколко стойности (с различни типове данни), поради което е възможно да се поиска първо int за да получите резултат от SP. Също така, по-добре да използвате силно написан клас viewmodel с int собственост, а не динамична ViewBag или ViewData:

Модел

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);
}

Подобен въпрос:

консумират int резултат, върнат от съхранена процедура в MVC4

Как да работите с ObjectResult в Рамката на Entity 4