2016-01-25 2 views
0

Я тянул строки из базы данных, ища конкретные столбцы. Сейчас он тянет 5 строк, и мне нужно указать правильные столбцы для каждой из строк с моделью. Вот мой контроллер:Как вернуть массивную динамику в mvc 4 в представление?

public ActionResult Index() 
    { 
     //Use mimetype as key to find correct rows 
     var mimetype = "mcv"; 
     dynamic LookupData = GetVideoUrls(mimetype); 
     return View(LookupData); 
    } 

    private dynamic GetVideoUrls(string mimetype) 
    { 
     var VideoService = new AppServices.Video.GetAllVideoByMimeType(); 
     dynamic videoFiles = VideoService.Execute(mimetype);//Execute grabs the rows from the database 
     return (videoFiles); 
    } 

На моем взгляде, у меня есть:

@model IEnumerable<dynamic> 

видеофайлы возвращают пять строк с 13 столбцов. Мне нужно получить доступ к 2 столбцам для каждой из пяти строк в представлении. Как мне это сделать?

Update Вот моя модель:

public class LoginVideoModel 
{ 
    public LoginVideoModel(string englishurl, string spanishurl) 
    { 
     EnglishVideoUrl = englishurl; 
     SpanishVideoUrl = spanishurl; 
    } 
    public string EnglishVideoUrl 
    { 
     get; 
     set; 
    } 
    public string SpanishVideoUrl 
    { 
     get; 
     set; 
    } 
} 
public class WelcomeVideoModel 
{ 
    public WelcomeVideoModel(string englishurl, string spanishurl) 
    { 
     EnglishVideoUrl = englishurl; 
     SpanishVideoUrl = spanishurl; 
    } 
    public string EnglishVideoUrl 
    { 
     get; 
     set; 
    } 
    public string SpanishVideoUrl 
    { 
     get; 
     set; 
    } 
} 
public class BenefitVideoModel 
{ 
    public BenefitVideoModel(string englishurl, string spanishurl) 
    { 
     EnglishVideoUrl = englishurl; 
     SpanishVideoUrl = spanishurl; 
    } 
    public string EnglishVideoUrl 
    { 
     get; 
     set; 
    } 
    public string SpanishVideoUrl 
    { 
     get; 
     set; 
    } 
} 
public class MyEnrollmentVideoModel 
{ 
    public MyEnrollmentVideoModel(string englishurl, string spanishurl) 
    { 
     EnglishVideoUrl = englishurl; 
     SpanishVideoUrl = spanishurl; 
    } 
    public string EnglishVideoUrl 
    { 
     get; 
     set; 
    } 
    public string SpanishVideoUrl 
    { 
     get; 
     set; 
    } 
} 
public class AdminSideVideoModel 
{ 
    public AdminSideVideoModel(string englishurl, string spanishurl) 
    { 
     EnglishVideoUrl = englishurl; 
     SpanishVideoUrl = spanishurl; 
    } 
    public string EnglishVideoUrl 
    { 
     get; 
     set; 
    } 
    public string SpanishVideoUrl 
    { 
     get; 
     set; 
    } 
} 

Надеется, что это помогает, как хорошо.

Update Вот код videoservice.execute:

public class GetAllVideoByMimeType 
{ 
    public dynamic Execute(string mimetype) 
    { 
     return DBRepository.GetAllByCritera<DataContainers.File>("WHERE MimeType = @0", mimetype); 
    } 
} 

обновление 3 Вот хранилище:

/// <summary> 
    /// Obtain one or more items from db based on Where Clase 
    /// </summary> 
    /// <typeparam name="T">Table Type</typeparam> 
    /// <param name="whereClause">Standard WHERE clause with paramterized statements 
    /// Example: WHERE [email protected]",args: 4 
    /// </param> 
    /// <param name="arguments"></param> 
    /// <returns></returns> 
    public static IEnumerable<dynamic> GetAllByCritera<T>(string whereClause, params object[] arguments) 
    { 
     var model = new DBTableModel<T>(); 
     return model.All(where: whereClause, args: arguments); 

    } 

Что делать, если третье состояние ред этим:

public ActionResult Index() 
    { 
     //Use mimetype as key to find correct rows 
     var mimetype = "mcv"; 
     dynamic LookupData = GetVideoUrls(mimetype); 
     return View(LookupData); 
    } 

    private dynamic GetVideoUrls(string mimetype) 
    { 
     var VideoService = new AppServices.Video.GetAllVideoByMimeType(); 
     List<dynamic> videoFiles = VideoService.Execute(mimetype); 
     ApplicationVideoModel appvids = new ApplicationVideoModel(); 
     dynamic LoginFiles = videoFiles.Where(v => v.OriginalFileNameWithoutExtension == "LoginController").FirstOrDefault(); 
     dynamic WelcomeFiles = videoFiles.Where(v => v.OriginalFileNameWithoutExtension == "WelcomeController").FirstOrDefault(); 
     dynamic BenefitFiles = videoFiles.Where(v => v.OriginalFileNameWithoutExtension == "BenefitController").FirstOrDefault(); 
     dynamic MyEnrollmentFiles = videoFiles.Where(v => v.OriginalFileNameWithoutExtension == "MyEnrollmentController").FirstOrDefault(); 
     dynamic AdminFiles = videoFiles.Where(v => v.OriginalFileNameWithoutExtension == "AdminSideController").FirstOrDefault(); 

     return LoginFiles; 
    } 

Каждый из динамики возвращает строку, мне нужно, но как бы я посылаю каждый в представлении?

+1

Можете ли вы создать для этого модель? – Shyju

+0

Да. Но как это работает с этим? –

+0

Обновлен исходный вопрос, добавив модель, но не знаю, как это работает с тем, что я делаю. –

ответ

0

Что я отработал для своего применения:

public ActionResult Index() 
    { 
     //Use mimetype as key to find correct rows 
     var mimetype = "mcv"; 
     var VideoService = new AppServices.Video.GetAllVideoByMimeType(); 
     List<dynamic> videoFiles = VideoService.Execute(mimetype); 
     dynamic mymodel = new System.Dynamic.ExpandoObject(); 
     mymodel.LoginFiles = videoFiles.Where(v => v.OriginalFileNameWithoutExtension == "LoginController").FirstOrDefault(); 
     mymodel.BenefitFiles = videoFiles.Where(v => v.OriginalFileNameWithoutExtension == "BenefitController").FirstOrDefault(); 
     mymodel.WelcomeFiles = videoFiles.Where(v => v.OriginalFileNameWithoutExtension == "WelcomeController").FirstOrDefault(); 
     mymodel.MyEnrollmentFiles = videoFiles.Where(v => v.OriginalFileNameWithoutExtension == "MyEnrollmentController").FirstOrDefault(); 
     mymodel.AdminSideFiles = videoFiles.Where(v => v.OriginalFileNameWithoutExtension == "AdminSideController").FirstOrDefault(); 
     return View(mymodel); 
    } 

Как вы можете видеть, я использую mymodel. для построения модели, и я могу получить доступ к этому с точки зрения использования:

@Model.LoginFiles.EnglishVideoURL 

Спасибо за помощь!

0

на основе моделей образцов предоставленных вами, ваша общая модель объекта может выглядеть следующим образом

public class VideoUrlModel {  
    public string EnglishVideoUrl { get; set; } 
    public string SpanishVideoUrl { get; set; } 
} 

GetVideoUrls может быть обновлена ​​следующим образом

private IEnumrable<VideoUrlModel> GetVideoUrls(string mimetype) { 
    var VideoService = new AppServices.Video.GetAllVideoByMimeType(); 
    var videoFiles = VideoService.Execute(mimetype); 
    var models = videoFiles.Select(row => 
         new VideoUrlModel { 
           EnglishVideoUrl = row.englishvideourl, 
           SpanishVideoUrl = row.spanishvideourl 
         }); 
    return models; 
} 

Так как VideoService.Execute возвращается IEnumerable<dynamic> вы можете итерации по строкам с использованием расширения LINQSelect и создания модели ite мс при необходимости.

Так что теперь в ваш контроллер может передать коллекцию в представлении в качестве модели

public ActionResult Index() { 
    //Use mimetype as key to find correct rows 
    var mimetype = "mcv"; 
    var LookupData = GetVideoUrls(mimetype); 
    return View(LookupData); 
} 

Ваше мнение будет ожидать модель как,

@model IEnumerable<VideoUrlModel> 

и иметь доступ к коллекции, переданной в качестве модель для вида

+0

Я понимаю это сейчас. Вопрос, хотя, у меня несколько строк с двумя именами столбцов englishvideourl и spanishvideourl. как я могу подтвердить каждую строку, а затем столбец для этой строки? –

+0

Зависит от того, что возвращает 'VideoService.Execute'. Я сделал предположения относительно того, что он вернулся, и я спросил об OP, но вы еще не дали ответа. Итак, какой тип он возвращает? – Nkosi

+0

Я обновил исходный вопрос с помощью этого кода для 'videoervice.execute'. Он возвращает динамику всех строк, которые соответствуют критериям mimetype =. –

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