簡體   English   中英

如何用我的IEnumerable填充/填充DropDown <Model> 值ASP.NET MVC

[英]How can I fill / populate DropDown with my IEnumerable<Model> value ASP.NET MVC

我試圖從模型中設置下拉列表值,因為這是我需要在下拉列表中看到的值,但我遇到了一個錯誤:

不能從用法。 嘗試顯式指定類型參數。

這是我的代碼:

@model IEnumerable<Language>
@using Web.Helpers
@{
    ViewBag.Title = "";
}
<div class="">
    <div class="row">
        <div class="col-md-12 col-sm-12 col-xs-12">
            <div class="x_panel">
                <div class="x_title">
                    <h2><i class="fa fa-filter"></i> </h2>
                    <div class="clearfix"></div>
                </div>
                <div class="x_content">
                    <br />
                    @using (Html.BeginForm("Settings","Language", FormMethod.Post, new { @class = "form-horizontal form-label-left" }))
                    {
                        @Html.AntiForgeryToken()
                        @Html.ValidationSummary(true)

                        <div class="col-md-12 col-sm-12">
                            <div class="col-md-12 col-sm-12">
                                @Html.DropDownListFor(WHATTOWRITEHERE, new SelectList(ViewBag.Languagess, "Id", "Name"), new { @class = "form-control" })
                            </div>
                        </div>

                    }

                }
            }           
        }               
    }               
}

控制器動作:

public ActionResult Settings()
{
   List<Language> activeL = LanguageController.GetAll();
   ViewBag.Languagess = activeLanguages;

   return View(activeL);
}

也許我可以完全刪除ViewBag.Languagess ,所以我可以在那里使用(Model, "Id", "Name") (ViewBag.Languagess, "Id", "Name")

您需要像這樣編寫html

@Html.DropDownListFor(WHATEVER, new SelectList(ViewBag.languages, "Id", "Name"), new { @class = "form-control" })

而在您的控制器中

public ActionResult Settings()
{
   List<Language> activeL = LanguageController.GetAll();
   ViewBag.Languagess = activeL;

   return View();

}

public ActionResult Settings()
{
   List<Language> activeL = LanguageController.GetAll();

   ViewBag.Languages = activeLanguages.Select(item => new SelectListItem{
       Text = item.Name,
       Value = item.Id
    });

   return View(activeL);
}

@Html.DropDownListFor(m => m.LanguageId, ViewBag.Languages, new { @class = "form-control" })

由於您已請求如何使用強類型模型而不是ViewBag來執行此操作。

現在,您的視圖需要IEnumerable<Language>類型的模型。 將其更改為一個新類,其中包含頁面需要的所有值。

public class LanguagesViewModel
{
    List<Language> ActiveLanguages { get; set; }
}

然后在您的控制器中:

var model = new LanguagesViewModel();
model.ActiveLanguages = activeLanguages;
return View(model);

更改視圖以要求使用LanguagesViewModel:

@model LanguagesViewModel

現在,您將不再使用動態視圖包。

@Html.DropDownListFor(m => m.LanguageId, Model.ActiveLanguages, new { @class = "form-control" })

我認為您的模型可能是其他類型,例如“設置”。

public class SettingsModel
{
    public int LanguageId { get; set; }
}

public class Language
{
    public int Id { get; set; }
    public string Name { get; set; }
}

.cshtml

@model SettingsModel
@using Web.Helpers
@{
    ViewBag.Title = "";
}
<div class="">
    <div class="row">
        <div class="col-md-12 col-sm-12 col-xs-12">
            <div class="x_panel">
                <div class="x_title">
                    <h2><i class="fa fa-filter"></i> </h2>
                    <div class="clearfix"></div>
                </div>
                <div class="x_content">
                    <br />
                    @using (Html.BeginForm("Settings","Language", FormMethod.Post, new { @class = "form-horizontal form-label-left" }))
                    {
                        @Html.AntiForgeryToken()
                        @Html.ValidationSummary(true)

                        <div class="col-md-12 col-sm-12">
                            <div class="col-md-12 col-sm-12">
                                @Html.DropDownListFor(model => model.LanguageId, new SelectList(ViewBag.Languagess, "Id", "Name"), new { @class = "form-control" })
                            </div>
                        </div>

                    }

                }
            }           
        }               
    }               
}

控制者

    [HttpGet]
    public ActionResult Language()
    {
        List<Language> activeL = LanguageController.GetAll();
        ViewBag.Languagess = activeLanguages;
        return View();
    }

   [HttpPost]
    public ActionResult Language(SettingsModel settings)
    {
        Language selectedLanguage = LanguageController.GetAll().Where(l => l.Id == settings.LanguageId).SingleOrDefault();
        //...   your post operations.

    }

模型

   public class LanguageViewModel
    {
        public int LanguageId { get; set; }
        public IEnumerable<Language> ActiveLanguages{get; set;}
    }

    public class Language
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

調節器

   [HttpGet]
   public ActionResult Language()
    {
       var languageViewModel = new LanguageViewModel
        {
          ActiveLanguages = LanguageController.GetAll();
        }
         return View(languageViewModel);
     }

視圖

@model LanguageViewModel
@using Web.Helpers
@{
    ViewBag.Title = "";
}
<div class="">
    <div class="row">
        <div class="col-md-12 col-sm-12 col-xs-12">
            <div class="x_panel">
                <div class="x_title">
                    <h2><i class="fa fa-filter"></i> </h2>
                    <div class="clearfix"></div>
                </div>
                <div class="x_content">
                    <br />
                    @using (Html.BeginForm("Settings","Language", FormMethod.Post, new { @class = "form-horizontal form-label-left" }))
                    {
                        @Html.AntiForgeryToken()
                        @Html.ValidationSummary(true)

                        <div class="col-md-12 col-sm-12">
                            <div class="col-md-12 col-sm-12">
                                @Html.DropDownListFor(model => model.LanguageId, new SelectList(Model.ActiveLanguages, "Id", "Name"), new { @class = "form-control" })
                            </div>
                        </div>

                    }

                }
            }           
        }               
    }               
} 

它將在此示例中工作:

@{
   List<SelectListItem> listItems= new List<SelectListItem>();
   listItems.Add(new SelectListItem
        {
          Text = "Exemplo1",
          Value = "Exemplo1"
        });
   listItems.Add(new SelectListItem
        {
            Text = "Exemplo2",
            Value = "Exemplo2",
            Selected = true
        });
   listItems.Add(new SelectListItem
        {
            Text = "Exemplo3",
            Value = "Exemplo3"
        });
}

@Html.DropDownListFor(model => model.tipo, listItems, "-- Select Status --")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM