Привет есть код. Контролер
public class HomeController : Controller
{
public ActionResult Index()
{
using (StreamReader reader = new StreamReader("db.json"))
{
string json = reader.ReadToEnd();
var items = JsonConvert.DeserializeObject<List<SelectListItem>>(json);
ViewBag.List = items;
}
return View();
}
}
Вьюшка
@{
ViewBag.Title = "Лаба";
var listItems = new List<SelectListItem>();
foreach (var c in ViewBag.List)
{
listItems.Add(new SelectListItem { Text = c.Id, Value = c.Name });
}
}
<div class="row">
<div class="col-md-4">
@Html.DropDownList("Name", listItems)
</div>
</div>
Так вот вылетает эксепш
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: ""System.Web.Mvc.SelectListItem" не содержит определения для "Id""
показывает что ViewBag не пустой имеет 3 значения
вот JSON
[
{
"Id": 0,
"Name": "Саша"
},
{
"Id": 1,
"Name": "Даша"
},
{
"Id": 2,
"Name": "Маша"
}
]
что я не так делаю?
Проблема у Вас в том что Вы пытаетесь свою структуру (Id, Name) привести к SelectListItem, что конечно же не есть хорошо в Вашем случае. И соответсвенно Вы получаете RuntimeBinderException потому что Вы попытались десеариализовать Вашу структуру к SelectListItem который не содержить свойства/поля Id и Name.
Хот фикс вот:
var items = JsonConvert.DeserializeObject<List<dynamic>>(json);
ViewBag.List = items;
return View();
А по хорошему создайте класс, который може представлять Вашу структуру, например:
public class Entity // тут какое-то смысловое имя структуры.
{
public int Id { get; set; }
public string Name { get; set; }
}
и код в контролере будет таким:
var items = JsonConvert.DeserializeObject<List<Entity>>(json);
ViewBag.List = items;
return View();
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости