2014-01-27 4 views
4

Прежде всего, я должен сказать, что я новичок в MVC4 и разрабатываю это приложение и одновременно изучая MVC4 :).MVC4: Отправка дочернего элемента Частичные значения представления в контроллер?

В этом приложении, Ниже родитель вид, где 3 частичные виды визуализируются также есть одна кнопка:

[code] 
<td id="track">@Html.Partial("_Track",Model)</td><br> 
<td id="tech"> 
<div id="Technologies"> @Html.Partial("_Technology",Model) 
</div></td></tr> 
.. 
[some code] 
.. 

<td class="subtopic"> 
<div class="subtopiclist" id="subque">@Html.Partial("_Subtopics",Model)</div><br> 
<input type="Submit" value="Fetch Interview Questions" name="Fetch" id="Fetch" /> 
      </td> 

Частичное View1 (он содержит DropDownList):

@model MvcApplication3.Models.CommonWrapper 

@using (Ajax.BeginForm("SelectTrack", "Home", new AjaxOptions { UpdateTargetId = "Technologies" })) 
{ 
    @Html.DropDownListFor(
      m=>m.SelectedTrackId, 
      new SelectList(Model.track, "TrackId", "TrackName"), 
      string.Empty 
     ) 
} 
    <script type="text/javascript"> 
    $('#SelectedTrackId').change(function() { 
     $(this).parents('form').submit(); 
    }); 
</script> 

Parital View2 (в нем содержится выпадающий список):

@model MvcApplication3.Models.CommonWrapper 
@if (Model.tech != null && Model.tech.Count() > 0) 
{ 
    using (Ajax.BeginForm("SelectTechnology", "Home", new AjaxOptions { UpdateTargetId = "subque" })) 
    { 
    @Html.HiddenFor(m => m.SelectedTrackId) 
    @Html.DropDownListFor(
      m => m.SelectedTechId, 
      new SelectList(Model.tech, "TechId", "TechName"), 
      string.Empty 
      ) 
    } 
} 

    <script type="text/javascript"> 
    $(document).on('change', '#SelectedTechId', function() { 
     $(this).parents('form').submit(); 
    }); 

</script> 

Частичный вид 3 (он содержит несколько флажков):

@if (Model.subtopic != null && Model.subtopic.Count() > 0) 
{ 
<table> 
@for (int i = 0; i < Model.subtopic.Count; i++) 
{ 
<tr><td> 
    @Html.CheckBoxFor(m => m.subtopic[i].IsSelected, new { id = "subTopic_" + i }) 
    @Html.HiddenFor(m => m.subtopic[i].SubtopicName) 
    @Html.DisplayFor(m => m.subtopic[i].SubtopicName) 
    <td> 
    </tr> 
} 
</table> 

} 

Теперь в родительской точки зрения, я хочу, чтобы извлечь значения из этих трех частичной views.Also, мне нужно отправить эти неправдоподобные значения в контроллер.
Как это сделать? может кто-нибудь, пожалуйста, помогите мне в этом.
Заранее спасибо

Добавлен код контроллера:

[HttpPost] 
     public ActionResult SelectTrack(int? selectedTrackId) 
     { 
      CommonWrapper wrapper = new CommonWrapper(); 
      wrapper.tech = new List<TechModel>(); 

      if (selectedTrackId.HasValue) 
      { 
       wrapper.tech = (from s in CommonWrapper.GetTechnology() 
           where s.TrackId == selectedTrackId 
           orderby s.TechName 
           select s).ToList(); 
      } 

      return PartialView("_Technology", wrapper); 

     } 

     [HttpPost] 
     public ActionResult SelectTechnology(int? selectedTechId) 
     { 
      CommonWrapper wrapper = new CommonWrapper(); 
      wrapper.subtopic = new List<SubtopicsModel>(); 

      if (selectedTechId.HasValue) 
      { 
       wrapper.subtopic = (from s in CommonWrapper.GetSubtopics() 
              where s.TechId == selectedTechId 
              orderby s.SubtopicName 
              select s).ToList(); 
      } 

      return PartialView("_Subtopics", wrapper); 

     } 
+0

Ничего из этого не является магия (только несколько затемняется). Начните с простого просмотра выходного HTML-страницы вашей страницы, и вы увидите, как структурирована форма и входы (как обычная одиночная форма с большим количеством полей). ** Одна из проблем заключается в том, что вы размещаете формы на частичных представлениях, когда вам, вероятно, нужна одна форма в родительском объекте. ** Большая часть из них будет привязываться к полученной модели 'as-is', поскольку вы правильно используете индексацию для массивов. Пожалуйста, покажите свой код контроллера. –

+0

Привет TrueBlueAussie Я добавил код контроллера. – user3240292

ответ

1

Попробуйте изменить формы ajax на простое использование jquery для отправки на требуемый контроллер действие. Это отделяет ваши частичные представления от требуемой цели обновления.

Вы можете применить этот метод для каждого из выпадающих списков, вызывающих другое действие контроллера.

Удалите свой Ajax.BeginForm и соответствующий код jquery и замените их ниже.

Родитель Посмотреть

<script type="text/javascript"> 
    $(function() 
    { 
     $("#SelectedTrackId").change(function() 
     { 
      var selectedValue = $(this).val(); 
      $.ajax(
      { 
       type: "post", 
       data: selectedValue, 
       url: url, 
       success: function (data) 
       { 
        // data contains your partial view 
        $("#some-container-id").html(data); 
       } 
      }); 
     }); 
    }); 
</script> 
+0

Большое вам спасибо за помощь Дэвида. Я пробовал использовать первый подход, и он работает для меня :) – user3240292

-1

Я бы собрать ViewModel и поставить это в действии [HttpPost] Controller

Надеется, что это помогает

Christian

+0

Было бы очень полезно, если вы поделитесь фрагментом кода фиктивного кода. – user3240292

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