Я читал сообщения за два дня по этому поводу и до сих пор не понял ответа. Я хочу захватить выбор DropDownList в моем ModelView, передав его в @ Html.ActionLink, который вернет его к определенному действию в контроллере.Pass @ Html.DropDownList выбор с использованием @ Html.ActionLink с ViewModel для контроллера
Мои ViewModel:
public class ViewModelShipments
{
public ViewModelShipments()
{
tblShipments = new tblShipments();
}
public tblShipments tblShipments;
public IEnumerable<SelectListItem> ShipmentIDsList;
public string SelectedShipmentID;
}
Мой контроллер:
public ActionResult SelShipment(string SelectedShipmentID)//for ShipmentID change via DropDownList
{
int id = db.tblShipments.Max(p => p.ShipmentID); // find last ShipmentID
if (SelectedShipmentID != null)
{
id = Int32.Parse(SelectedShipmentID);//convert text to int
}
Мой Вид:
@Html.DropDownListFor(expression: model=>model.SelectedShipmentID,selectList: Model.ShipmentIDsList) @* render DropDownList object*@
@Model.SelectedShipmentID @* display value of SelectedShipmentID *@
<!-- Upon Click, send selected ID to controller -->
<!-- the ActionLink is working, but the routeValues: always contain NULL -->
@Html.ActionLink(linkText: "Submit", actionName: "SelShipment", controllerName: "Shipment", routeValues: Model.SelectedShipmentID, htmlAttributes: null)
Почему ActionLink (..., routeValues: Model.SelectedShipmentID ,. ..) всегда возвращают NULL в контроллер? Model.SelectedShipmentID не обновляется с выбранным идентификатором DropDownList. Пожалуйста, помогите, поскольку у меня заканчивается время.
Вам нужно javascript/jquery, чтобы изменить URL-адрес ссылки на основе выбранного значения или лучше разместить значение с помощью формы (может быть 'FormMethod.Get'). И причина, по которой его ошибка, заключается в том, что код Razor оценивается на сервере до его отправки клиенту, поэтому добавленное значение маршрута является начальным значением «Model.SelectedShipmentID» (оно не изменяется только потому, что вы выбираете что-то в своем UI –
И поскольку 'ShipmentID' является typeof' int', ваш параметр метода и свойство модели должны быть 'int? SelectedShipmentID' (не' string') –
Спасибо за быстрые ответы. Я работаю над настройками. Удалось восстановить SelectedShipmentID POST'ing формы обратно к контроллеру. С 60 полями в форме я буду смотреть на предложение Стивена ниже использования Ajax и частичных представлений, чтобы свести к минимуму ненужный обмен данными. Это было первоначальное намерение использовать ActionLink. много учиться ... так мало времени. –