2010-01-30 3 views
5

У меня есть 2 свойства в моем ViewModelASP.NET MVC ViewModel и DropDownList

class ViewModel1 
{ 
    Dictonary<int, string> PossibleValues {get;set;}//key/value 
    int SelectedKey {get;set} 
} 

Я хочу изменить это с помощью Html.DropDownListFor

Я хочу, чтобы получить MVC для автоматической сериализации данных в/из ViewModel, поэтому я могу использовать следующие

public ActionResult Edit(ViewModel1 model) ... 

Каков наилучший способ для этого?

+0

Вы используете ASP.NET MVC версии 1 или 2? –

+0

Я использую версию 2 – jameszhao00

ответ

11

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

Если вы не редактируете список Возможные значения на клиенте, тогда нет необходимости отправлять их обратно. Если вам нужно повторно заполнить список, сделайте это на стороне сервера в своем post action, используя тот же метод, с которого вы первоначально заполняли словарь.

Например, в вас странице:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<ViewModel1>" %> 
<!-- some html here --> 
<%= Html.DropDownListFor(x => x.SelectedKey, new SelectList(Model.PossibleValues, "key", "value"))%> 

В контроллере

[AcceptVerbs(HttpVerbs.Get)] 
public ViewResult Edit() { 
var model = new ViewModel1 { 
    PossibleValues = GetDictionary() //populate your Dictionary here 
}; 
return View(model); 
} 

[AcceptVerbs(HttpVerbs.Post)] 
public ViewResult Edit(ViewModel1 model) { //default model binding 
    model.PossibleValues = GetDictionary(); //repopulate your Dictionary here 
    return View(model); 
} 

Где GetDictionary() представляет собой метод, который возвращает свой населенный словарь объекта.

See this similar question for more details

0

Я не думаю, что вы сможете построить словарь из выпадающего списка в форме. Выпадающий список будет опубликовать только одно значение назад, которое вы можете установить как ваше свойство SelectedKey, но вы не сможете восстановить словарь PossibleValues.

Чтобы восстановить словарь, вам понадобится поле формы для каждой записи в нем. Вы могли бы сделать что-то вроде этого, сгенерированный с помощью цикла Еогеасп по словарю:

<input type="hidden" name="PossibleValues[0].Key" value="key0"> 
<input type="hidden" name="PossibleValues[0].Value" value="value0"> 
<input type="hidden" name="PossibleValues[1].Key" value="key1"> 
<input type="hidden" name="PossibleValues[1].Value" value="value1"> 
. 
. 
. 

В конечном счете я бы вопрос о необходимости заселить словаря из формы. Если они могут выбрать только одно значение, почему бы VariableValues ​​просто не искать откуда-то вне вашего ViewModel (например, в вашем репозитории?) Зачем хранить его с помощью ViewModel?

0

Решение пользовательских ModelBinding в рамках ASP.NET MVC здесь несколько примеров ..

stevesmithblog.com/blog/binding-in-asp-net-mvc

www.singingeels.com/ Статьи/Model_Binders_in_ASPNET_MVC.aspx

odetocode.com/Blogs/scott/archive/2009/04/27/12788.aspx

odetocode.com/Blogs/scott/archive/2009/05/05/12801. aspx

надеюсь, что вы найдете их полезными ...

Благодаря

Смежные вопросы