【问题标题】:Required data not displayed in html.dropdownlist MVC所需数据未显示在 html.dropdownlist MVC 中
【发布时间】:2016-03-18 06:32:41
【问题描述】:

我正在尝试从模型中填充一些数据以在下拉列表中查看。为此,我将模型创建为

型号:

public class NoOfSupportingLanguages
{
    public int LanguageId { get; set; }
    public string LanguageName { get; set; }
}
public class OrganisationModel
{
      public SelectList NoofSupportingLanguages { get; set; }
}

而在控制器端,是这样的:

控制器:

public ActionResult Index()
        {
            List<NoOfSupportingLanguages> LanguageOption = new         List<NoOfSupportingLanguages>{
                new NoOfSupportingLanguages{ LanguageId = 1, LanguageName="English" },
                new NoOfSupportingLanguages{ LanguageId = 2, LanguageName="Arabic" },
                new NoOfSupportingLanguages{ LanguageId = 3, LanguageName="French" }
            };
            SelectList languageList = new SelectList(LanguageOption, "LanguageId");
            model.NoofSupportingLanguages = languageList;
            return View(model);
        }

查看:

 @Html.LabelFor(m => m.NoofSupportingLanguages, "Number of languages to support :")
 @Html.DropDownList("ddlNoOfSupportingLanguages", Model.NoofSupportingLanguages)

但在我的下拉列表中,我得到的值是:

Web.Models.Organisation.NoOfSupportingLanguages
Web.Models.Organisation.NoOfSupportingLanguages
Web.Models.Organisation.NoOfSupportingLanguages

请提供一些帮助。

提前致谢!!

【问题讨论】:

  • @Html.DropDownListFor(m=>m.NoOfSupportingLanguages , Model.ModelName, "Select Language") ,在您的视图中替换它

标签: c# asp.net-mvc asp.net-mvc-4 html.dropdownlistfor selectlist


【解决方案1】:

您的代码有多个错误。首先,要生成SelectList,你需要提供2个属性名(value属性和显示文本),所以它需要

SelectList languageList = new SelectList(LanguageOption, "LanguageId", "LanguageName");

接下来,你需要绑定一个属性,所以你的模型需要包含另一个属性,比如

public int SelectedLanguage { get; set; }

然后在视图中

@Html.DropDownListFor(m => m.SelectedLanguage, Model.NoofSupportingLanguages)

这样当您提交表单时,SelectedLanguage 的值将是所选选项的值。

【讨论】:

  • 总是想知道使用SelectListIEnumerable&lt;SelectListItem&gt; 来解决这个问题哪个更好?
  • @teovankot, SelectList 对性能的影响很小,因为它使用反射来生成IEnumerable&lt;SelectListItem&gt;。但它更简洁一些,尽管有些人不喜欢“魔术”字符串。这真的取决于个人喜好。
  • @teovankot,在任何情况下,我都会在视图模型中创建属性IEnumerable&lt;SelectListItem&gt;,这样您就可以通过任何一种方式生成它。
【解决方案2】:

如果你想以干净的 MVC 方式来做,你应该改变你的模型:

public class OrganisationModel
{
      public int SelectedLanguageId { get; set; }
      public List<SelectListItem> NoofSupportingLanguages { get; set; }
}

然后在你的控制器中:

    public ActionResult Index()
    {
        List<SelectListItem> LanguageOption = new List<SelectListItem>{
            new SelectListItem { Value = 1.ToString(), Text = "English" },
            new SelectListItem { Value = 2.ToString(), Text = "Arabic" },
            new SelectListItem { Value = 3.ToString(), Text = "French" }
        };
        //here you can set selected value
        model.SelectedLanguageId = 1;
        model.NoofSupportingLanguages = LanguageOption;
        return View(model);
    }

然后你就可以这样做了:

 @Html.LabelFor(m => m.NoofSupportingLanguages, "Number of languages to support :")
 @Html.DropDownListFor(m => m.SelectedLanguageId, Model.NoofSupportingLanguages, "Select Language")

现在,当您 POST 模型时,它会自动将 Selected LanguageId 绑定到 SelectedLanguageId 模型属性。

【讨论】:

    猜你喜欢
    • 2017-12-21
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多