2012-05-31 3 views
1

Я провел последние полтора года, пытаясь найти этот ответ, и иногда кажется, что я так близко, но пока не повезло. У меня есть контроллер, где я определил запрос LINQ и пытаюсь выяснить, как передать результаты в список. Ниже приведен код контроллера:Передача данных с контроллеров в представления

namespace CMS.Controllers 
{ 
    public class SurveyController : Controller 
    { 

     private SupportEntities supdb = new SupportEntities(); 
     private BuisnessEntities bsdb = new BuisnessEntities(); 

     // 
     // GET: /Survey/BizSurveyC 

     public ViewResult BizSurveyC(string nipaKey, string bOrg) 
     { 
      // use the next two lines for testing and then either delete or comment them out. 
      nipaKey = "22"; 
      bOrg = "MPC"; 

      var Cquery = from Mstr in bsdb.BizOrgInsts 
            join Dat in bsdb.BizSurveyQ on Mstr.ID equals Dat.MASTERID 
            where Mstr.NIPAKEY == nipaKey & Mstr.FULCIRCORG == bOrg 
            orderby Mstr.STREETSUFX, Dat.ADDRESS, Mstr.NUMBER 
            select new { MasterId = Mstr.ID, Name = Mstr.OLDNAME, Mstr.ADDRESS, Mstr.NIPAKEY, Dat.SURVEYDATE, SurveyId = Dat.ID, Dat.RESURVEYOF, Dat.STAMP }; 

      //ViewBag.BizQuery = Cquery; 
      ViewData["BizQuery"] = new SelectList(Cquery); 

      return View(); 
     } 

    } 
} 

Как вы можете сказать, глядя я попытался ViewData и Viewbag, но до сих пор не повезло


Вот так все сейчас появляются:

ViewModel класса

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace CMS.Models 
{ 
    public class BizSurveyCVM 
    { 
     public long? MasterId { get; set; } 
     public string Name { get; set; } 
     public string Address { get; set; } 
     public string NipaKey { get; set; } 
     public string Date { get; set; } 
     public long? SurveyId { get; set; } 
     public long? Resurvey { get; set; } 
     public string DateStamp { get; set; } 
    } 
} 

Модифицированного Действие

 var Cquery = (from Mstr in bsdb.BizOrgInsts 
            join Dat in bsdb.BizSurveyQ on Mstr.ID equals Dat.MASTERID 
            where Mstr.NIPAKEY == nipaKey & Mstr.FULCIRCORG == bOrg 
            orderby Mstr.STREETSUFX, Dat.ADDRESS, Mstr.NUMBER 
            select new BizSurveyCVM 
            { 
             MasterId = Mstr.ID, 
             Name = Mstr.OLDNAME, 
             Address = Mstr.ADDRESS, 
             NipaKey = Mstr.NIPAKEY, 
             Date = Dat.SURVEYDATE, 
             SurveyId = Dat.ID, 
             Resurvey = Dat.RESURVEYOF, 
             DateStamp = Dat.STAMP 
            }).ToList(); 

     return View(Cquery); 
    } 

BizSurveyC Посмотреть

@model List<CMS.Models.BizSurveyCVM> 

<table> 
    <tr> 
     <th> 
      MasterId 
     </th> 
     <th> 
      Name 
     </th> 
     <th> 
      Address 
     </th> 
     <th> 
      NipaKey 
     </th> 
     <th> 
      Date 
     </th> 
     <th> 
      SurveyId 
     </th> 
     <th> 
      Resurvey 
     </th> 
     <th> 
      DateStamp 
     </th> 
     <th></th> 
    </tr> 

@foreach (var item in Model) { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.MasterId) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Name) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Address) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.NipaKey) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Date) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.SurveyId) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Resurvey) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.DateStamp) 
     </td> 
</table> 

здесь результирующий вид:

ОГОРЧЕННО НЕ РАЗРЕШЕНО СОХРАНИТЬ IMAGE ЕЩЕ, НО В ЗРЕНИИ У меня есть HEADERS НО НЕТ ДАННЫЕ ,

У меня, очевидно, есть некоторая работа, которую нужно сделать в представлении или, возможно, в вопросе, но все выглядит намного лучше, благодаря помощи каждого. Большое спасибо

+0

Какая версия MVC? – RedFilter

+2

показать нам свой код просмотра? – swapneel

+0

Что вы до сих пор хорошо, поэтому я подозреваю, что проблема заключается в том, как вы вызываете viewdata в представлении. – Brian

ответ

0
return View(Cquery); 

или

return View("ViewName",Cquery); 

, а затем на ваш взгляд, тип модели должен соответствовать типу Cquery. Но я нахожу, что его проще (при условии, что вы используете VS), чтобы просто щелкнуть правой кнопкой мыши в теле метода где-нибудь и нажать «добавить представление» и выбрать модель из списка типов моделей.

+0

Поскольку это соединение какого типа модели вы бы использовали или должно быть каким-то образом стать моделью? –

+0

Возможно, связанный список или словарь? Вы можете в значительной степени использовать любой тип, который хотите, до тех пор, пока вы сначала обрабатываете преобразование. Если вы хотите выполнить маршрут словаря, вы зацикливаете соединение и строите словарь . Затем перейдите в словарь и взгляните на словари –

0

Вы уверены, что хотите сделать?

Это более полезная коллекция в представлении, поэтому вы можете создавать все, что вам нужно, например, выбрать список.

не забудьте указать, кто является вашей датой и отображаемым значением в списке выбора, например ..

ViewData["BizQuery"] = new SelectList(Cquery, null, "MasterId", "Name"); 

Ok, ваш код работает для меня, поэтому проверить ваш взгляд, необходимо сделать правильный бросок вашего объекта в ViewData

вам нужно иметь что-то вроде этого

@foreach (SelectListItem item in (SelectList)ViewData["BizQuery"]) 
{ 

    <p>@item.Text</p> 

} 
2

You может создать класс ViewModel для хранения результатов вашего запроса, а затем строго ввести ваше представление для нового класса ViewModel:

ViewModel Clas s:

public class BizSurveyCVM 
{ 
    public long MasterId { get; set; } 
    public string Name { get; set; } 
    ... 
} 

Модифицированный Действие:

var Cquery = (from Mstr in bsdb.BizOrgInsts 
       join Dat in bsdb.BizSurveyQ on Mstr.ID equals Dat.MASTERID 
       where Mstr.NIPAKEY == nipaKey & Mstr.FULCIRCORG == bOrg 
       orderby Mstr.STREETSUFX, Dat.ADDRESS, Mstr.NUMBER 
       select new BizSurveyCVM { MasterId = Mstr.ID, Name = Mstr.OLDNAME, ...} 
      ).ToList(); 

return View(Cquery); 

BizSurveyC Посмотреть

@model List<{namespace}.BizSurveyCVM> 

@foreach(var item in Model) { 
    {HTML Mark-up} 
} 

EDIT: Вот обновленный пример представления на основе обновленного вопроса:

@model List<{namespace}.BizSurveyCVM> 

@foreach(var item in Model) { 
    <tr> 
     <td> 
      @item.MasterId 
     </td> 
     <td> 
      @item.Name 
     </td> 
     <td> 
      @item.Address 
     </td> 
     ... 
    </tr> 
} 
+0

Это, вероятно, лучшее решение, чем мое, если вы будете использовать эту модель более одного раза. Если вы просто используете его один раз, это, вероятно, немного перебор. –

+0

Мне нравится этот, и я пытаюсь его сейчас. Это мне больше знакомо. Я расскажу всем, как получится. –

+0

У меня есть модифицированный код, но я не могу опубликовать его из-за формы. Я прочитаю справку и посмотрю, смогу ли я это понять. И он все еще не работает. Я получаю следующее сообщение об ошибке: Элемент модели, переданный в словарь, имеет тип «System.Collections.Generic.List'1 [<> f__AnonymousType4'8 [System.Nullable'1 [System.Int64], System.String, System.String, System.String, System.String, System.Nullable'1 [System.Int64], System.Nullable'1 [System.Int64], System.String]] ', но для этого словаря требуется элемент модели типа 'System.Collections.Generic.List'1 [CMS.Models.BizSurveyCVM]. –

Смежные вопросы