2014-01-31 3 views
0

Model1:Модель Связывание динамического созданного DropDownList

public class Model1 
     { 
      public int Id { get; set; } 
      public int VariantId { get; set; } 
      public string Name { get; set; }  
      public string Language { get; set; } 
      public IList<Model2> ListModel2{ get; set; } 

      public VmSysVariantResource() 
      {    
       ListModel2=new List<Model2>();  
      } 
     } 

Model2:

public class Model2 
    { 
     public int Id { get; set; } 
     public int ParamterId { get; set; } 
     public int ValueId { get; set; } 
     [Required] 
     public string SelectedValue { get; set; } 
     public string ParameterName { get; set; } 
     public IList<PossibleValue> Values { get; set; } 

     public IList<SelectListItem> ValuesSelectListItem 
     { 
      get 
      { 

       var list = (from item in Values 
          select new SelectListItem() 
          { 
           Text = item.ValueName, 
           Value = item.Id 
          }).ToList(); 
       return list; 
      } 
      set { } 
     } 

    } 

PossibleValue:

public class PossibleValue 
    { 
     public int Id { get; set; } 
     public string ValueName { get; set; } 

    } 

Теперь экспликации аб что я хочу сделать: Предположим, у нас есть одна модель «Модель1». Эта модель имеет список Model2. Model2 содержит ParameterName и список возможных значений. Теперь у меня есть форма, как это:

@using (Ajax.BeginForm("Action", "Controller", null, 
     new AjaxOptions 
     { 
      HttpMethod = "POST" 
     })) 
    { 

     <table class="sample" style="margin: 0 auto; width: 400px"> 
      <tr> 
       <td> 
        @Resource.Name: 
       </td> 
       <td> @Html.TextBoxFor(c => c.Name) 
       </td> 
      </tr>    

      @foreach (var item in Model.ParamtersToValue) 
      { 
       <tr> 
        <td> 
         @item.Parameter: 
        </td> 
        <td> 
         @Html.DropDownList("ParamtersToValue", @item.ValuesSelectListItem) 
        </td> 
       </tr> 
      } 
     </table> 
     <input type="submit" value="Submit"/> 

    } 

О методе пост в контроллере Я хочу, чтобы получить Model1 со списком ListModel2. Это мой пост метод:

[HttpPost] 
     public ActionResult MyAction(Model1 obj) 
     { } 

я ожидал получить на пост метода Model1 с ListModel2, который будет содержать SelectedValue выбранного из выпадающего списка, но я не уверен, как построить раскрывающееся меню внутри Еогеасп блока для обеспечения модели привязки к Работа. Любое предложение будет оценено. Спасибо ..

ответ

0

Устройство связывания по умолчанию работает с индексами. Итак, чтобы привязать его к модели, измените цикл foreach на цикл for и визуализируйте элемент управления с помощью индекса. Как это:

@for (int i = 0; i < Model.ParamtersToValue.Count; i++) { 
    @* .. stuff here *@ 

    <td> 
     @Html.DropDownListFor(x => Model.ParametersToValue[i], Model.ParametersToValue[i].ValuesSelectListItem) 
    </td> 

    @* .. stuff here *@ 
} 

Это приведет имена элементов, таких как [0].ParametersToValue, [1].ParametersToValue и т.д. Модель связующее связывают их в порядке появления в Перечислимый вашего выбора.

+0

Большое спасибо. Я заработал. –

+0

Нет проблем. Рад помочь :) –

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