Я работаю над приложением, в котором есть возможность использовать декодер VIN для получения информации об автомобиле. Вы можете ввести VIN или выбрать из раскрывающихся списков производителя, год, марку, модель и т. д.
Выпадающий список производителей — это единственное, что инициализируется на странице без выбранного значения. При выборе производителя будут найдены все доступные годы для этого производителя и возвращен список лет, а также список производителей и тот, который был выбран. При выборе года будет возвращен список доступных производителей, лет и марок, с указанием выбранного производителя и выбранного года, и так далее по приложению.
Этот рабочий процесс работает нормально, и все мои раскрывающиеся списки отображаются правильно. Однако при вводе VIN я выбрал значения для каждого, и все еще нахожу списки доступных опций и отображаю страницу точно так, как если бы кто-то до этого момента выбирал опции вручную. Когда я это делаю, все раскрывающиеся списки отображаются правильно с правильно выбранными атрибутами, кроме производителя.
Я попытался максимально изолировать его и убрал все остальное, и теперь у меня есть это:
Вид:
@model My_Project.Models.Data
@using System.Web.Helpers
@using (Html.BeginForm("Temp", "Home", FormMethod.Post, new { id = "formIndex" }))
{
<div>
VIN:
@Html.TextBox("vin", Model.VIN) <button type="submit">Go!</button>
</div>
<div>
Manufacturer: (@Model.ManufacturerId)
@Html.DropDownListFor(m => m.ManufacturerId, Model.Manufacturers, new { style = "width: 175px;" })
</div>
}
Модель:
namespace My_Project.Models
{
[Serializable]
public class Data
{
public string VIN { get; set; }
public int ManufacturerId { get; set; }
public SelectList Manufacturers { get; set; }
}
}
Контроллер:
public ActionResult Temp()
{
Data model = new Data
{
Manufacturers = DBAccess.getManufacturers()
};
Session["ModelData"] = model;
return View(model);
}
[HttpPost]
public ActionResult Temp(Data newData)
{
Data oldData = Session["ModelData"] as Data;
oldData.ManufacturerId = 20;
Session["ModelData"] = oldData;
return View(oldData);
}
Если я установлю ManufacturerId в Temp(), то мой выпадающий список отображается правильно с любым выбранным производителем. Однако, если он установлен в ответе на сообщение, выпадающий список отображается со всеми правильными параметрами, но без выбора правильного производителя. И если вы посмотрите в представлении, у меня на самом деле есть отображение изготовителя, чтобы убедиться, что он получает данные правильно, а изготовителю присвоено значение, которое есть в списке, но оно не выбрано.
Я не могу понять, в чем разница между этими двумя экземплярами, учитывая, что модель, используемая при рендеринге представления, выглядит идентично. Вдобавок ко всему, если метод post вызывается путем выбора производителя (на данный момент я убрал эту функциональность), он вернет ту же модель, но также будет отображаться правильно.
Что может привести к тому, что это не будет отображаться правильно при возврате с почты?