ViewData错误-使用ViewData将数据从控制器传递到视图
本文关键字:ViewData 视图 控制器 数据 错误 使用 | 更新日期: 2023-09-27 18:17:00
我想把数据从控制器传递到视图。在我的晚餐控件中,我有一个编辑操作。代码是
//
// GET: /Dinner/Edit/5
public ActionResult Edit(int id)
{
var dinner = _repository.GetDinner(id);
ViewData["Countries"] = new SelectList(PhoneValidator.AllCountries, dinner.Country);
return View(dinner);
}
然后,我想使用下拉列表在Edit视图页面中显示国家的信息。我的代码是
<div class="editor-label">
@Html.EditorFor(model => model.Country)
</div>
<div class="editor-field">
@Html.DropDownList("Country", ViewData["Countries"] as SelectList)
@Html.ValidationMessageFor(model => model.Country)
</div>
然后,我在这行
得到一个错误@Html.DropDownList("Country", ViewData["Countries"] as SelectList)
错误信息为
The ViewData item that has the key 'Country' is of type 'System.String' but must be of type 'IEnumerable<SelectListItem>'
注意:
- 我在我的餐桌上有一个"国家"属性。国家的类型是字符串。
- 我认为"国家"在错误行只是定义显示名称在这个场的形式。所以错误似乎是不可解释的。
我有一个类名DinnerViolation,在这个类中我有一个get方法来检索我在Edit控制器中用于设置SelectList值的所有国家,请检查代码:
public class PhoneValidator { static IDictionary<string, Regex> countryRegex = new Dictionary<string, Regex>() { { "USA", new Regex("^[2-9]''d{2}-''d{3}-''d{4}$")}, { "UK", new Regex("(^1300''d{6}$)|(^1800|1900|1902''d{6}$)|(^0[2|3|7|8]{1}[0-9]{8}$)|(^13''d{4}$)|(^04''d{2,3}''d{6}$)")}, { "Netherlands", new Regex("(^''+[0-9]{2}|^''+[0-9]{2}''(0'')|^''(''+[0-9]{2}'')''(0'')|^00[0-9]{2}|^0)([0-9]{9}$|[0-9''-''s]{10}$)")}, }; public static bool IsValidNumber(string phoneNumber, string country) { if (country != null && countryRegex.ContainsKey(country)) return countryRegex[country].IsMatch(phoneNumber); else return false; } public static IEnumerable<string> AllCountries { get { return countryRegex.Keys; } } }
}
帮助吗?由于
您正在返回一个IEnumerable<string>
public static IEnumerable<string> AllCountries
{
get
{
return countryRegex.Keys;
}
}
当您需要返回IEnumerable<SelectListItem>
像这样(未测试):
public static IEnumerable<SelectListItem> AllCountries
{
get
{
var countries = new List<SelectListItem>();
foreach(var country in countryRegex.Keys)
{
countries.Add(SelectListItem() { Text = country, Value = country };
}
return countries;
}
}