基于 C# 的代码应该放在 MVC 视图中的什么位置?

Where should be C# based Code placed in the MVC View?

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

现在在加载页面时,我发现在加载页面时最初没有加载图像。我使用 API 调用从数据库中获取图像路径,我在其中存储了缓存中的特定数据列表。

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

我必须选择

1) 将 Call 直接放在我的图片标签内的 Src 属性中

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

2) 在视图的顶部,在 C# 块内,我应该声明变量,然后调用 API,然后在我的图像标记内的 Src 属性内使用该变量。

在视图之上

@{
string myVal = myfunctioncall;
}

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

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

我不确定页面是如何呈现的,也不确定哪种方法是完成工作的最佳方法。

最好的方法是在控制器中进行所有操作,然后创建一个对象作为模型传递给视图。

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

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

正确的做法是:

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 应该尽可能愚蠢。 它只是表示层。