我目前正致力于基于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......
我不确定页面的呈现方式以及完成工作的最佳方法。
答案 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)
最好的方法是在控制器中进行所有操作,然后将您作为模型传递的对象放到视图中。
在您看来,您可以使用模型填写您的字段。