Я веду себя в борьбе с определением выбранных данных из объекта HtmlHelper.DropDownListFor
. Проблема в том, что нет единственного свойства модельного класса, который мог бы однозначно идентифицировать модель.DropDownListFor Value Field - Идентификатор комбинации свойств
Ниже приведены мои модели и классы viewmodel, а также образец вызова HtmlHelper.DropDownListFor
в представлении.
public class MyModel
{
public int ParentId { get; set; } // combined with ChildId is the unique identifier
public int ChildId { get; set; } // see above
public string Name { get; set; } // not unique
}
public class MyViewModel
{
public IEnumerable<MyModel> MyModels { get; set; }
public <???> SelectedItem { get; set; }
}
@Html.DropDownListFor(m => m.SelectedItem, new SelectList(Model.MyModels, "DataValueField", "Name"))
Проблема здесь состоит в том, что единственный уникальный idenfier из MyModel
является сочетание из ParentId
и ChildId
. Итак, каков был бы лучший способ получить данные, чтобы однозначно идентифицировать выбранный элемент?
Чтобы построить уникальный идентификатор одного из этих объектов модели будет похож на следующий (бизнес-логики):
ModelUniqueIdentifier = ParentId * 100 + ChildId
Но я не вижу, каким-либо образом исполнять эту логику, чтобы установить MyViewModel.SelectedItem
этому ,
Когда есть обратная передача из любых триггеров формы для отправки, я хотел бы иметь возможность захватить выбранное значение из свойства модели SelectedItem
, чтобы выполнить другую обработку. Но с одномерным "DataValueField"
я не уверен, что это лучший способ.
Наиболее очевидным способом обойти это было бы введение суррогатного ключа в данные в виде идентификатора одиночного тона. Но с этими конкретными данными есть только этот очевидный составной естественный ключ, который делал большую работу до этого момента.
Так двумерная данные выглядит следующим образом:
ParentId ChildId Name
7 3 Name1
4 8 Name2
5 3 Name3
4 6 Name4
Если бы я должен был добавить суррогатный ключ к данным он будет делать работу:
SurrogateId ParentId ChildId Name
0 7 3 Name1
1 4 8 Name2
2 5 3 Name3
3 4 6 Name4
В то время как это будет работать, это потребовал бы, чтобы я изменил базовую таблицу, модель и большой объем ссылочного кода, поэтому, если мне не нужно добавлять этот суррогатный ключ, я бы предпочел не делать этого.
Любые мысли или идеи? Заранее спасибо!
Ваш принятый ответ вряд ли решит проблему. Вы не смогли бы привязать модель к обратной передаче, и если вы получите, если из 'Request.Form', как бы вы преобразовали значение обратно в его значения« ParentId »и« ChildId »? Вы можете использовать функцию [спаривания] (http://en.wikipedia.org/wiki/Pairing_function#Cantor_pairing_function), хотя я бы рекомендовал укусить пулю и исправить базу данных, чтобы дать таблице уникальное поле ID –
. Я закончил работу с суррогатный ключ в данных и, в свою очередь, модельный класс. –