将处理从视图移动到控制器

时间:2017-09-25 20:25:06

标签: asp.net-mvc razor

目前,我们有一个视图可以进行一些繁重的处理来创建我们发送给客户端的XML css提要。以下是一段代码,可以进行一些处理:

@foreach (Models.BVModels cat in ViewBag.BVSubCategories)
{
    <Category>
        @if (!string.IsNullOrEmpty(cat.LinkName))
        {
            <ExternalId>(cat.LinkName)</ExternalId>
        }
        else
        {
            <ExternalId>cat.Title</ExternalId>
        }
        <ParentExternalId>cat.ParentName</ParentExternalId>
        <Name>cat.Title</Name>
        @if (cat.Brand.ToLower() == "[hardcoded value]" && !string.IsNullOrEmpty(cat.ID))
        {
            if (!string.IsNullOrEmpty(cat.LinkName) && !string.IsNullOrEmpty(cat.ParentName))
            {
                <CategoryPageUrl><![CDATA[[URL]/gallery/@cat.ParentName.ToLower()/@cat.LinkName.ToLower()]]></CategoryPageUrl>
            }
            string imageName = cat.ID + ".jpg";
            <ImageUrl>[URL]/imageeditor/@imageName</ImageUrl>
        }
        else if (cat.Brand.ToLower() == "[BRAND]")
        {
            if (!string.IsNullOrEmpty(cat.LinkName))
            {
                <CategoryPageUrl><![CDATA[[URL]/product/category/@cat.ID/@cat.LinkName.ToLower()]]></CategoryPageUrl>
            }
            string imagename = cat.ID + ".jpg";
            <ImageUrl>[URL]/image/getdvimagebypageidandimageid/@cat.ID/1/@imagename</ImageUrl>
        }
        else
        {
            if (!string.IsNullOrEmpty(cat.LinkName))
            {
                <CategoryPageUrl>[URL]</CategoryPageUrl>
            }
        }
        </Category>
}

我需要将其移动到控制器而不是将其保留在视图上。这很快就完成了一次创建饲料,但现在是减缓的方法。更不用说有很多硬编码值和一些需要清理的处理。现在这个cshtml页面没有@model指令,它从ViewBag中提取数据。我想将其推送到控制器并清理此页面。我可以将ViewBag传递给Controller并处理吗?我在MVC上生锈了,可能会朝着正确的方向发展。所以我想在ViewBag中调用此控制器ActionResult传递并返回一个格式如下的XML字符串。

感谢。

1 个答案:

答案 0 :(得分:0)

我为feed创建了一个新的控制器,它从数据库中提取数据并将其返回到我可以迭代并返回XML字符串的集合中。这取代了ViewBag上的长处理(20分钟)。现在我将收紧代码并进行一些擦洗以清理它。

感谢。

约翰