是否可以在ASP.NET MVC中创建强类型复杂视图

时间:2016-12-23 23:17:50

标签: c# asp.net asp.net-mvc

对象:

public class CountryLanguage
{
    public string Country { get; set; }

    public string Language { get; set; }
}

视图模型:

public class CreateComplexObjectViewModel
{
    IList<CountryLanguage> SelectedCountryLanguages { get; set; }
}

查看:

@model CreateComplexObjectViewModel
@{
    IEnumerable<CountryLanguage> allCountryLanguages = GetAllFromConfigFile();
}

@Html.ListBoxFor(model => model.SelectedCountryLanguages,
                 allCountryLanguages.Select(cl => new SelectListItem
                                            {
                                                Text = $"{cl.Country} {cl.Language}",
                                                Value = $"{cl.Country}_{cl.Language}"
                                            }))

当我按原样提交此表单时,我会看到以下参数已发布:

SelectedCountryLanguages=US_en&SelectedCountryLanguages=US_en-US

无法绑定到CountryLanguage对象。如果我将所有内容都交换到string s然后一切正常,那么我必须进行字符串解析才能获得单独的值

var selections = new List<CountryLanguage>();

foreach (string countryLanguage in model.SelectedCountryLanguages)
{
    string[] parts = countryLanguage.Split("_");
    selections.Add(new CountryLanguage
    {
        Country = parts[0],
        Language = parts[1]
    });
}

有没有办法可以绑定CountryLanguage对象而无需进行额外的处理?

1 个答案:

答案 0 :(得分:0)

使用

指定您的名字参数
@Html.ListBox("CountryLanguage", ...)

而不是ListBoxFor。

或创建自定义html标记,而不是帮助程序。