Member 14662237 Ответов: 1

Dropdownlist создает исключение invalidoperationexception при проверке формы с помощью проверки модели в ASP.NET MVC


I am a fresher to ASP.net mvc and in Dropdownlist throws a InvalidOperationException while validating the form it throws a exception and i am using model validation in mvc why this error is occured plz help me soon as posssible!.... 


Что я уже пробовал:

Страница Контроллера:

[NonAction]
        public SelectList ToSelectList(DataTable table, string valueField, string textField)
        {
            List<SelectListItem> list = new List<SelectListItem>();

            foreach (DataRow row in table.Rows)
            {
                list.Add(new SelectListItem()
                {
                    Text = row[textField].ToString(),
                    Value = row[valueField].ToString()
                });
            }
            return new SelectList(list, "Value", "Text");
        }
        public void source()
        {

            string Constr = System.Configuration.ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
            OdbcConnection con = new OdbcConnection(Constr);
            con.Open();
            OdbcCommand cmd = new OdbcCommand("SELECT source_id,source_name,source_status FROM source_dets", con);
            OdbcDataAdapter da = new OdbcDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            ViewBag.source_rid = ToSelectList(dt, "source_id", "source_name");
        }
        public void industry()
        {

            string Constr = System.Configuration.ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
            OdbcConnection con = new OdbcConnection(Constr);
            con.Open();
            OdbcCommand cmd = new OdbcCommand("SELECT industry_id,industry_name,industry_status FROM industry_dets", con);
            OdbcDataAdapter da = new OdbcDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            ViewBag.industry_rid = ToSelectList(dt, "industry_id", "industry_name");
        }


обзорная страница :

@Html.DropDownListFor(a => a.source, ViewBag.source_rid as SelectList, "--Please Select--", new { @class = "form-control bg-light" })


Бросать исключение :

System.InvalidOperationException: 'There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'industry'.'

1 Ответов

Рейтинг:
7

dnxit

Вероятно, вы не заполняете его после сбоя проверки, см. Этот пример
Существует действие создать для автомобиля сначала нам нужно отправить выпадающий список в Get а затем нужно повторно отправить если ModelState не является допустимым

public class VehicleViewModel
{
     public string VehicleName {get; set;}
     public string VehicleMake {get; set;}
     public int VehicleTypeId {get; set;}
     public List<SelectListItem> VehicleTypes {get; set;}
     
}

[HttpGet]
public ActionResult Create()
{
     var viewModel = new VehicleViewModel();

     viewModel.VehicleTypes = GetVehicleTypesSelectListItems();

     retrun View(viewModel);
}

[HttpPost]
public ActionResult Create(VehicleViewModel model)
{
    if(ModelState.IsValid)
    {
       // everything is fine save data to database
    }

    // Something went wrong for model validation so again need to refill 
    model.Vehicles = GetVehicleTypesSelectListItems();

    return View(model);
}

private List<SelectListItem> GetVehicleSelectListItems()
{
	var selectList = new List<SelectListItem>();
    var vechiles = GetAllVehicleTypes(); // get all vehicles from your db
	foreach (var element in vechiles)
	{
		selectList.Add(new SelectListItem
		{
			Value = element.Id,
			Text = element.Type
		});
	}

	return selectList;
}



Ваш взгляд должен быть таким


@Html.DropDownListFor(model => model.VehicleTypeId, Model.VehicleTypes, " --- Select --- ", new { @class = "form-control" })


Member 14662237

как я хочу, чтобы дать модель для этого??????как использовать список<selectlistitem&ГТ; GetVehicleSelectListItems для вставки значений в БД???????

Member 14662237

plzz ответьте на вышеприведенный вопрос....

dnxit

Обычно мы показываем значения внешнего ключа в раскрывающемся списке
модель.VehicleTypeId даст вам значение, выбранное конечным пользователем, которое вы можете сохранить в качестве внешнего ключа.

Member 14662237

Спасибо!!!!

dnxit

С удовольствием :)