Наборы данных MVC с пакетами просмотра - PullRequest
3 голосов
/ 22 марта 2012

Как поместить набор данных в пакет просмотра и отобразить результат в виде?

У меня есть набор данных из модели, который я записываю в пакет просмотра.Я хочу использовать цикл foreach, чтобы вытащить данные из мешка вида в представлении.

У меня уже есть переменная, входящая в представление, поэтому я не могу нормально передать набор данных.У меня также будет много других наборов данных на странице.поэтому я подумал, что viewbag - лучший способ решить эту проблему.

модель

class modeldata 
{
    public dataset readrows(DataSet dataset)
    {
    //returns data from sql query.
    }
}

контроллер:

 DataSet data = new DataSet();
 modeldata getdata = new modeldata ();
 ViewBag.Data = getdata.readrows(data);
 return view("page1") //based on case statement. 
 //Already have a value going into view, so I need to use viewbag

Вид:

@Model site.controllers.homecontroller;

     foreach (Model.data row in ViewBag.Data.Rows)
        {
            @:row["id"] + " " + row["name"];
        } 

Ответы [ 2 ]

7 голосов
/ 22 марта 2012

Для отображения данных в представлении у вас есть два варианта. Одним из них является передача экземпляра класса Model в строго типизированное представление. Второй вариант - использовать ViewBag. В вашем случае, похоже, что вы делаете немного и того, и другого, но я бы рекомендовал использовать строго типизированный подход к представлению.

Представление будет иметь свойство Model, которое представляет экземпляр типа класса, указанного в объявлении @Model. В вашем коде вы используете класс контроллера, который не будет работать. Я переписал пример для использования DataSet в качестве модели. Как вы видите, свойство Model представления становится экземпляром класса System.Data.DataSet и имеет все его свойства и методы.

View

@Model System.Data.DataSet;

foreach (DataRow row in Model.Rows)
{
    @:row["id"] + " " + row["name"];
} 

Контроллер

DataSet data = new DataSet();
modeldata getdata = new modeldata();
return View(getdata.readrows(data));

Edit:

Ниже приведен пример использования словаря в классе модели для хранения нескольких наборов данных. Затем вы можете изменить представление, чтобы использовать тип modeldata в качестве класса Model.

Модель

namespace Site.Models
{
    class modeldata
    {
        public Dictionary<string, DataSet> DataSets { get; set; }

        public static DataSet ReadRows(DataSet dataset)
        {
            //returns data from sql query.
        }
    }
}

View

@Model Site.Models.modeldata;

@foreach (System.Data.DataTable table in Model.DataSets["sampleData"].Tables)
{
    foreach (System.Data.DataRow row in table.Rows)
    {
        @:row["id"] + " " + row["name"];
    }
} 

Контроллер

DataSet data = new DataSet();
modeldata getdata = new modeldata();
getdata.DataSets["sampleData"] = modeldata.ReadRows(data);
return View(getdata);
1 голос
/ 22 марта 2012

Вам необходимо создать класс модели, который будет содержать каждый набор данных в качестве свойства, например:

public class MyModel 
{
    DataSet data1,
    DataSet data2,
    DataSet data3
}

Затем верните строго типизированное представление, привязанное к типу 'MyModel', которое в представлении позволит вам сделать:

var myDataInTheView = model.data1;

Затем вы можете использовать подход foreach, как уже описывали другие, но не на самом классе модели, а на свойствах модели. В приведенном выше фрагменте обведите myDataInTheView

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...