Dar*_*Zon 0 asp.net-mvc radio-button asp.net-mvc-4
我来自使用MVVM的WPF编程,所以这是我在ASP.NET中使用MVC的第一次体验
我试图做的是展示这个模型:
public class MultipleChoiceQuestion : Question
{
public string QuestionText
public List<MultipleChoiceAnswer> PossibleAnswers { get; set; }
}
public class MultipleChoiceAnswer
{
public string Text { get; set; }
public string UrlImage { get; set; }
public bool IsCorrect { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我有一个List<T>,这里是我试图在RadioButtons中显示的地方.我在这个网站上搜索一些数据,我发现主要使用了radioButtons中的ViewModels.
有没有人为ASP.NET MVC实现RadioButtonListFor <T>?
在这里使用ViewModels的目的是什么?如何在单选按钮中显示我的列表?这只是一点点混乱.
关于人们使用ViewModel的原因有很多答案.最直接的原因通常是您的视图所需的数据与业务模型中的数据不同.例如:
假设您的应用程序允许用户上传图像,然后将其保存到Azure Blob Storage等云存储中.存储在blob存储中的文件可通过以下格式的URL访问:https://account.blob.core.windows.net/filename.png
您的数据库模型可能类似于:
public class Image
{
public int Id { get; set; }
public string FileName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在这里,您要保存图像的文件名.保存完整的URL会浪费空间,而且会使数据移动到其他位置非常困难.
但是,在显示图像时,您的视图需要完整的URL.这就是ViewModel变得有用的地方.(请参阅下面的说明,了解如何避免在ViewModel中对URL进行硬编码).
public class ImageViewModel
{
public int Id { get; set; }
public string FileName { get; set; }
public string Url
{
get { return "https://account.blob.core.windows.net/" + FileName; }
}
}
Run Code Online (Sandbox Code Playgroud)
通过将其传递给View,它现在拥有正确显示此图像所需的一切:
<h3>@Model.FileName</h3>
<img src="@Model.Url" alt="@Model.FileName"/>
Run Code Online (Sandbox Code Playgroud)
如果你移动存储提供商,比如说亚马逊S3(https://account.s3.amazonaws.com/filename.png),你只需要在一个地方更新网址,你的视图完全不受影响
作为旁注,您可能希望将AutoMapper视为进一步简化操作的方法,并避免在ViewModel中对URL进行硬编码.AutoMapper允许您定义用于映射模型 - > ViewModel的规则,包括设置默认值,展平对象等.
| 归档时间: |
|
| 查看次数: |
2460 次 |
| 最近记录: |