我在SO上遇到了所有其他类似问题,但我无法理解如何为我的案例或哪个解决方案实施解决方案。这是我在MVC的第二天,我遇到的事情可能非常简单。
我要做的是,检查条件并返回注册页面,如果满足条件则发出警告。当它发生时,dropdownlist给出了名义错误。
在触发SP之前检查条件。有问题的是CompanyExists。
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterViewModel model, FormCollection coll)
{
bool UserExists = CompanyDB.User_Check_Exists(model.Email);
bool CompanyExists = CompanyDB.Company_Check_Exists(model.CountryCode, model.TaxIdNo);
if (!ModelState.IsValid)
{
return View(model);
}
if (CompanyExists)
{
ViewBag.CompanyExists = CompanyExists;
return View(model);
}
if (coll["chkContract"] != "on")
{
ViewBag.ContractError = true;
return View(model);
}
ViewBag.UserExists = UserExists;
if (UserExists)
{
string UserEmail = model.Email;
ViewBag.UserEmail = model.Email;
}
string error = String.Empty;
RegistrationDB.Registration_Add(model, out error);
return View("RegisterComplete");
}
下拉人口:
public class MVCUtility
{
public static ClaimsIdentity CurrentClaimsIdentity{
get { return null; }
}
public static List<SelectListItem> DataTableToListItem(DataTable Table, string ValueField, string TextField) {
List<SelectListItem> items = new List<SelectListItem>();
foreach (DataRow dr in Table.Rows) {
SelectListItem item = new SelectListItem() { Value = dr[ValueField].ToString(), Text = dr[TextField].ToString() };
items.Add(item);
}
return items;
//SelectList list = new SelectList(items);
//return list;
}
}
和register.cshtml的下拉行
@Html.Bootstrap().DropDownListFor(t => t.CountryCode, MVCUtility.DataTableToListItem((DataTable)ViewBag.CountryList, "Code", "Name")).HtmlAttributes(new { @style = "width:100%;" })
我从其他问题中理解的是,我需要通过在return(View);
行之前向其发送数据来重新填充下拉列表。我不知道如何用这些参数来管理它。
答案 0 :(得分:1)
ViewBag.CountryList
为空。
在控制器中 没有选定的值
ViewBag.CountryList = new MultiSelectList("Bind Your Country List", "Code", "Name");
具有选定值
ViewBag.CountryList = new MultiSelectList("Bind Your Country List", "Code", "Name","Selected Code");
在cshtml页面
@Html.DropDownList("CountryCode", (MultiSelectList)ViewBag.CountryList, new { id = "CountryCode" })