Comment passer ADO.NET DataSet à une vue

J'ai un projet hérité que nous passons lentement à MVC, mais il y a des centaines d'objects ADO.NET SQL DataSet

Je souhaite conserver les sets de données dans le model et y accéder dans la vue. Est-ce possible ou existe-t-il un meilleur moyen de le faire? Créer des lists est difficile car il y a trop de données. Nous finirons par convertir le SQL en entité, mais pas maintenant.

Exemple:

Modèle:

ssortingng query = "SELECT * FROM dbo.manf"; SqlDataAdapter adapter = new SqlDataAdapter(query, conn); DataSet data = new DataSet(); adapter.Fill(data, "manf"); 

Vue:

 @foreach (DataRow data in manf.Tables["manf"].Rows) { @:manf["id"] + " " + manf["name"]); } 

Vous pouvez transmettre n'importe quel object à votre vue, donc votre code de controller devrait ressembler à ceci:

 public ViewResult Index() { .... return View(data); } 

Et votre vue:

 @model System.Data.DataSet @foreach (DataRow row in Model.Tables["manf"].Rows) { @(row["id"] + " " + row["name"]) } 

L'object transmis sera stocké dans la propriété Model de la class de base générique de la vue et vous pouvez y accéder avec Model. Le @model définit le type de données de l'object transmis.

Tout code sera codé HTML de toute façon, le: n'est pas nécessaire. Si vous ne voulez pas encoder, vous devrez utiliser @ Html.Raw (…).

EDIT: vous ne pouvez déplacer qu'un seul paramètre en tant que model. Si vous souhaitez utiliser plus d'un object, vous définissez un nouveau type de données (un ViewModel) qui contient les propriétés pour les deux. Pour les objects simples tels qu'un titre de window, vous pouvez utiliser ViewBag.

 ViewBag.Title = myTitle; 

Le ViewBag est une propriété dynamic du controller et essentiellement un wrapper sur ViewData.

Code du controller

  //pQ is your query you have created //P4DAL is the key name for connection ssortingng DataSet ds = pQ.Execute(System.Configuration.ConfigurationManager.ConnectionSsortingngs["Platform4"].ConnectionSsortingng); //ds will be used below //create your own view model according to what you want in your view //VMData is my view model var _buildList = new List<VMData>(); { foreach (DataRow _row in ds.Tables[0].Rows) { _buildList.Add(new VMData { //chose what you want from the dataset results and assign it your view model fields clientID = Convert.ToInt16(_row[1]), ClientName = _row[3].ToSsortingng(), clientPhone = _row[4].ToSsortingng(), bcName = _row[8].ToSsortingng(), cityName = _row[5].ToSsortingng(), provName = _row[6].ToSsortingng(), }); } } //you will use this in your view ViewData["MyData"] = _buildList; 

Vue

  @if (ViewData["MyData"] != null) { var data = (List<VMData>)ViewData["MyData"]; <div class="table-responsive"> <table class="display table" id="Results"> <thead> <tr> <td>Name</td> <td>Telephone</td> <td>Category </td> <td>City </td> <td>Province </td> </tr> </thead> <tbody> @foreach (var item in data) { <tr> <td>@Html.ActionLink(item.ClientName, "_Display", new { id = item.clientID }, new { target = "_blank" })</td> <td>@item.clientPhone</td> <td>@item.bcName</td> <td>@item.cityName</td> <td>@item.provName</td> </tr> } </tbody> </table> </div> }