相关疑难解决方法(0)

MVC局部视图中的多态ViewModel集合和渲染

我的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,以便我可以访问不同的属性.

我将如何以更优雅的方式解决这个问题?我是否需要为抽象类创建一个新的代理基类来创建它的实例更容易?

c# polymorphism asp.net-mvc abstract-class

7
推荐指数
1
解决办法
741
查看次数

6
推荐指数
2
解决办法
2118
查看次数

将自定义HTML Helper添加到MVC项目

我一直在浏览网页试图找到一个很好的示例/教程,详细说明如何为我的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)

c# asp.net-mvc html-helper razor asp.net-mvc-3

6
推荐指数
1
解决办法
3万
查看次数

DropDownList引导样式

我是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)

感谢大家的帮助.

css c# asp.net asp.net-mvc twitter-bootstrap

3
推荐指数
1
解决办法
2万
查看次数