基于C#的代码放在MVC视图中应该放在哪里?

时间:2017-11-23 07:00:21

标签: c# asp.net-mvc asp.net-mvc-4 view

我目前正致力于基于MVC 5的项目。现在,为了从Database中检索少量文本内容,我进行了API调用以获取要在View中使用的文本。在这里,我的视图是一个基本上简单的形式,其中很少的文本来自数据库。

现在在加载页面时,我发现在加载页面时最初没有加载Image。我使用API​​调用从数据库中引入Image路径,其中我已经存储了来自Cache的特定数据列表。

现在我不确定我应该在哪里调用API。我创建了一个通用函数来调用API来检索数据。

我必须选择

1)将Call直接放在我的图像标签

中的Src属性内
<img src="@myfunctioncall" style="max-height:50px;" />

2)在View的顶部,在C#块内部,我应该声明变量,然后调用API,然后在我的image标签内的Src属性中使用该变量。

在视图之上

@{
string myVal = myfunctioncall;
}

然后在我的img标签中使用myVal

.........Code......
<img src="@myVal" style="max-height:50px;" />
.........Code......

我不确定页面的呈现方式以及完成工作的最佳方法。

3 个答案:

答案 0 :(得分:2)

在控制器中,您必须编写代码以从数据库中检索数据,然后创建一个视图Bag ViewBag.Path= imagePath;,其中imagePath是c#字符串变量,其中包含检索的路径值然后在视图中,您可以将ViewBag用作<img src="@ViewBag.Path" style="max-height:50px;" />

答案 1 :(得分:1)

正确的方法是:

1)建立模型:

public class MyModel
{
     public string ImagePath {get;set;}
     //other properties
}

2)控制器:

public class MyController:Controller
{
    public ActionResult Index()
    {
       MyModel model = new MyModel();
       model.ImagePath = //here get it from service
       return View(model);
    }
}

3)查看:

<img src="@Model.ImagePath" style="max-height:50px;" />

在视图的第一行,您需要添加:

@model MyModel

另一个(未建议)选项是:

ViewBag不是强类型的,因为它的类型是dynamic,这意味着拼写错误等错误不会在构建过程中被捕获,但在运行时

控制器:

public class MyController:Controller
{
    public ActionResult Index()
    {
       ViewBag.ImagePath = //your service call
       return View();
    }
}

查看:

<img src="@ViewBag.ImagePath" style="max-height:50px;" />

将服务调用放入View的想法违反了MVC模式,其中View应尽可能愚蠢。 它只是表示层。

答案 2 :(得分:0)

最好的方法是在控制器中进行所有操作,然后将您作为模型传递的对象放到视图中。

在您看来,您可以使用模型填写您的字段。