基于 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
应该尽可能愚蠢。
它只是表示层。
我目前正在从事基于 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
应该尽可能愚蠢。
它只是表示层。