Asp.net mvc 如何将MVC4中的海量动态返回到视图?

Asp.net mvc 如何将MVC4中的海量动态返回到视图?,asp.net-mvc,asp.net-mvc-4,methods,Asp.net Mvc,Asp.net Mvc 4,Methods,我正在从数据库中提取行以查找特定列。现在它正在拉取5行,我需要为模型中的每一行引用正确的列。这是我的控制器: public ActionResult Index() { //Use mimetype as key to find correct rows var mimetype = "mcv"; dynamic LookupData = GetVideoUrls(mimetype); return View(LookupD

我正在从数据库中提取行以查找特定列。现在它正在拉取5行,我需要为模型中的每一行引用正确的列。这是我的控制器:

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>
希望这也有帮助

更新 以下是videoservice.execute代码:

public class GetAllVideoByMimeType
{
    public dynamic Execute(string mimetype)
    {
        return DBRepository.GetAllByCritera<DataContainers.File>("WHERE MimeType = @0", mimetype);
    }
}
公共类GetAllVideoByMimeType
{
公共动态执行(字符串mimetype)
{
返回DBRepository.GetAllByCritera(“其中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 someID=@0",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);

    }
//
///根据Where Clase从数据库中获取一个或多个项目
/// 
///表格类型
///带有参数化语句的标准WHERE子句
///示例:其中someID=@0”,args:4
/// 
/// 
/// 
公共静态IEnumerable GetAllByCritera(字符串whereClause,参数对象[]参数)
{
var模型=新的DBTableModel();
返回model.All(where:where子句,args:arguments);
}
如果我尝试以下操作会怎么样:

public ActionResult Index()
{
//使用mimetype作为键查找正确的行
var mimetype=“mcv”;
动态lookUpdatea=GetVideoUrls(mimetype);
返回视图(lookupdatea);
}
私有动态GetVideoURL(字符串mimetype)
{
var VideoService=new-AppServices.Video.GetAllVideoByMimeType();
List videoFiles=VideoService.Execute(mimetype);
ApplicationVideoModel appvids=新的ApplicationVideoModel();
动态登录文件=视频文件。其中(v=>v.OriginalFileNameWithoutExtension==“LoginController”).FirstOrDefault();
动态WelcomeFiles=视频文件。其中(v=>v.OriginalFileNameWithoutExtension==“WelcomeController”).FirstOrDefault();
动态BenefitFiles=videoFiles.Where(v=>v.OriginalFileNameWithoutExtension==“BenefitController”).FirstOrDefault();
动态MyEnrollmentFiles=视频文件。其中(v=>v.OriginalFileNameWithoutExtension==“MyEnrollmentController”).FirstOrDefault();
动态AdminFiles=videoFiles.Where(v=>v.OriginalFileNameWithoutExtension==“AdminSideController”).FirstOrDefault();
返回登录文件;
}

每个动态都会返回我需要的行,但是如何将每个行发送到视图?

根据您提供的示例模型,您的公共模型对象可以如下所示

然后可以按如下方式更新
getvideourl

您的视图预期模型为

@model IEnumerable<VideoUrlModel>
@model IEnumerable

并访问作为视图模型传递的集合

以下是我的应用程序的工作原理:

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);
    }

谢谢你的帮助!

你能为这个创建一个视图模型吗?是的。但是它是如何工作的?更新了原始问题添加模型,但不知道这与我正在做的工作是如何工作的。什么类型的
VideoService.Execute
return?我根据添加的信息更新了答案,我现在明白了。问题though、 我有多行,两个列名是englishvideourl和spanishvideourl。如何引用每行,然后引用该行的列?取决于
VideoService的内容。执行
返回。我对返回的内容进行了假设,并在OP上进行了询问,但您尚未给出响应。那么返回的是什么类型?我更新了代码的原始问题是
videoservice.execute
。它返回一个符合mimetype=标准的所有行的动态。JeffMcbride我得到了动态部分。我试图理解动态背后的内容。因为它不是一个具体的类型,我只是猜测属性是什么。现在我不知道你的repository正在将列映射到属性。你明白我的意思吗?我想是的。我用存储库更新了这个问题。这有帮助吗?DBTableMNodel只是我到数据库的连接字符串。
public class VideoUrlModel {    
    public string EnglishVideoUrl { get; set; }
    public string SpanishVideoUrl { get; set; }
}
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;
}
public ActionResult Index() {
    //Use mimetype as key to find correct rows
    var mimetype = "mcv";
    var LookupData = GetVideoUrls(mimetype);
    return View(LookupData);
}
@model IEnumerable<VideoUrlModel>
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);
    }
@Model.LoginFiles.EnglishVideoURL