我的MVC应用程序中的ViewModel的多态集合存在问题.我通过Web服务调用收到了这个,我需要迭代它们并根据对象类型给它们自己的局部视图.
public abstract class ProvinceViewModel
{
public string Code { get; set; }
}
public sealed class OntarioViewModel : ProvinceViewModel { }
public sealed class QuebecViewModel : ProvinceViewModel {}
Run Code Online (Sandbox Code Playgroud)
在我看来,我试图迭代它们并分配局部视图.我必须在这里进行大量的类型转换才能使其正常工作.如果我尝试将其移动到控制器操作并传入抽象类型,我将得到一个错误,我们无法创建抽象类的实例.
ICollection<ProvinceViewModel> ProvinceList; // collection receive via service
@for (int i = 0, c = ProvinceList.Count; i < c; i++)
{
var currentProvince = this.Model.ElementAt(i);
@switch (additionalRegistry.Code)
{
case "QC":
@Html.Partial("AlbertaDetail", (QuebecViewModel)currentProvince)
break;
case "ON":
@Html.Partial("OntarioDetail", (OntarioViewModel)currentProvince)
break;
default:
@Html.Partial("ProvinceDetail", ProvinceViewModel)
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我强烈键入View,以便我可以访问不同的属性.
我将如何以更优雅的方式解决这个问题?我是否需要为抽象类创建一个新的代理基类来创建它的实例更容易?
将helper类放在项目文件夹层次结构中的位置?
我一直在浏览网页试图找到一个很好的示例/教程,详细说明如何为我的MVC 3 Razor应用程序创建和使用我自己的自定义HTML帮助程序我发现这个如下所示
在ASP.NET MVC 3中添加自己的HtmlHelper
我已经创建了一个类(稍微修剪了一下)
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Linq.Expressions;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;
namespace MyWebApp
{
public static class ExtensionMethods
{
public static MvcHtmlString StateDropDownListFor<TModel, TValue>
(this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression)
{
Dictionary<string, string> stateList = new Dictionary<string, string>()
{
{"AL"," Alabama"},
{"AK"," Alaska"},
{"AZ"," Arizona"},
{"AR"," Arkansas"}
};
return html.DropDownListFor(expression,
new SelectList(stateList, "key", "value"));
}
}
}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好,
在我的控制器内部,我还添加了参考
using System.Web.Mvc.Html;
Run Code Online (Sandbox Code Playgroud)
现在在我的视图中我有以下内容
@Html.StateDropDownList(x => x.State)
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误
System.web.mvc.htmlhelper<system.collections.generic.list<Profile.ProfileImages>> does …
Run Code Online (Sandbox Code Playgroud) 我是ASP.NET的新手,并且一直在asp.net网站上通过ASP.NET MVC 5入门教程.
我遇到了一个问题,我似乎无法用引导程序设置我的下拉框.我目前正在使用下面的代码,它可以在标准下拉列表中显示它,但我不确定如何使样式工作.
旧代码:
Genre: @Html.DropDownList("movieGenre", "All")
Run Code Online (Sandbox Code Playgroud)
编辑:
@Paul找到解决方案:
@Html.DropDownList("movieGenre", (SelectList)ViewBag.movieGenre, "Select genre", new { @class = "form-control" })
Run Code Online (Sandbox Code Playgroud)
感谢大家的帮助.