/ / Nie można przekonwertować obiektu typu {System.Data.Entity.Core.Objects.ObjectResult <int>} na int - ASP MVC 5 - asp.net, asp.net-mvc

Nie można przekonwertować obiektu typu {System.Data.Entity.Core.Objects.ObjectResult <int>} na int - ASP MVC 5 - asp.net, asp.net-mvc

Wynik procedury składowanej daje wartość całkowitą. Muszę przekazać tę wartość do strony widoku i ją zwiększyć.

Kontroler:

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

Widok:

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

Błąd:

Najlepsze przeciążone dopasowanie metody dla "int.Parse (string)" ma pewne nieprawidłowe argumenty

Odpowiedzi:

0 dla odpowiedzi № 1

Zobacz poniżej.

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

Dzięki


0 dla odpowiedzi nr 2

Odpowiedź @ Wheels73 jest prawie słuszna, jednak musisz wiedzieć, że procedura składowana zwraca dane z DbContext w postaci zestawu wyników, nawet ma tylko jedną wartość. Możesz użyć albo FirstOrDefault() lub FirstOrDefault<int>() metoda, aby zapewnić, że powróci int:

Kontroler

var OrderId = db.USP_SEL_LAST_ORDERID().FirstOrDefault();
ViewData["OrderId"] = OrderId; // ensure this is an integer

Widok

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

Zauważ, że System.Data.Entity.Core.Objects.ObjectResult<T> może mieć wiele wartości (z różnymi typami danych), dlatego możliwe jest zapytanie pierwsze int aby uzyskać wynik SP. Lepiej też użyć silnie typowanej klasy viewmodel z int właściwość zamiast dynamicznej ViewBag lub ViewData:

Model

public class ViewModel
{
public int OrderId { get; set; }
}

Kontroler

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

Podobny problem:

zużyj wynik int zwrócony z procedury przechowywanej w MVC4

Jak radzić sobie z ObjectResult w Entity Framework 4