Frage

Ich erhalte Fehler versuchen, es durch meine Viewdata in der Ansicht iterieren ... Ich habe sogar versucht stark die Ansicht zu IEnumerable (App.Models.Namespace) eingeben und Modell verwenden, ohne Erfolg. Entweder ich erhalte eine Fehlermeldung aus Mangel an einer GetEnumerable Methode oder ungültig type casting ... Jede Idee, wie ich das tun?

Modell ...

public IQueryable<Product> getAllProducts()
{
    return (from p in db.Products select p);
}

Controller ...

public ActionResult Pricing()
{
    IQueryable<Product> products = orderRepository.getAllProducts();

    ViewData["products"] = products.ToList();

    return View();
}

Ansicht ...

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Pricing
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Pricing</h2>

    <div>
        <select class="product">
            <%foreach(var prod in ViewData["products"]){%>
                <option><%=prod.Title %></option>
            <%} %>

        </select><select></select>
    </div>

</asp:Content>
War es hilfreich?

Lösung

Versuchen Sie dies mit der Besetzung:

foreach(var prod in (List<Product>)ViewData["products"])

Andere Tipps

foreach (var prod in (ViewData["products"] as IEnumerable<Product>))

Ich habe in einer ähnlichen Situation und das funktionierte für mich.

Warum sind Sie es so ohnehin tun? Warum nicht tun:

Inherits="System.Web.Mvc.ViewPage<IEnumerable<Product>>

in der Ansicht. Dann in Ihrer Controller-Aktion zu tun:

public ActionResult Pricing()
{
    IQueryable<Product> products = orderRepository.getAllProducts();
    return View(products.ToList(););
}

Dann müssen Sie nicht ViewData überhaupt.

<%foreach(Product prod in ViewData["products"]){%>
foreach(var prod in ViewData["products"] as IQueryable<Product>)

Wenn Sie Liste erhalten von mehr als zwei Modell und wollen in einer Liste zwei Modell zeigen, als Sie wie folgt verwenden sollte .. Erstellen Sie Ihr Modell zwei erste ist für Studenten und zweite ist Lehrer.

// Create Models
public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public List<int> Marks { get; set; }
}

public class Teacher
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
}

// erstellen Controller

  public ActionResult Index()
    {
        List<Student> students = new List<Student>()
        {
            new Student {Id = 1, Name = "Vikas", Address = "Mohali", Marks = new List<int> {90, 23, 46,56} },
            new Student {Id = 2, Name = "Rajeev", Address = "Mohali", Marks = new List<int> { 56, 78, 34, 67 }},
            new Student {Id = 3, Name = "Ajay", Address = "Delhi", Marks = new List<int> {56, 78, 34, 56}}
        };

        List<Teacher> teachers = new List<Teacher>()
        {
            new Teacher {Id = 1, Name = "Arun Nagar", Address = "Delhi"},
            new Teacher {Id = 2, Name = "Manish Kumar", Address = "Mohali"}
        };

        var Querylist = (from student in students
                         where student.Address == "Mohali"
                         select student.Name)
                        .Concat(from teacher in teachers
                                where teacher.Address == "Mohali"
                                select teacher.Name);
        //get list in ViewBag
        ViewBag.DataLIst = Querylist;
        //get list in View Data
        ViewData["DataLIst1"] = Querylist.ToList();
        return View(Querylist.AsEnumerable());
    }

//create View "Index.cshtml"   


@foreach (var h in @ViewBag.DataLIst)
{ 
    <h3>@h</h3>
}
@foreach (var s in @ViewData["DataLIst1"] as List< string>)
{
    <h1>@s</h1>
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top