0

asp.net mvc를 사용하여 제품을 구현하고 싶습니다.
내 제품은 여러 모듈로 구성되어 있으며 jquery 탭 위젯을 사용하여 사용자가 제출 한 내용을 안내합니다.
내 ProductController는 viewModel 개체의 목록을 제품보기로 보냅니다.
그래서 내 제품의보기는 다음과 같습니다jquery ajax를 통해 viewModels를 업데이트하십시오.

@model IList<View.Products.Modules.IModuleView> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#tabs").tabs({ ajaxOptions: 
      { 
       type: 'POST', 
       cache: false 
      } 
     }); 
    }); 
</script> 

<div id="tabs"> 
    <ul> 
     <li><a href="#fragment-1"><span>Tab1</span></a></li> 
     <li><a href="#fragment-2"><span>Tab2</span></a></li> 
     <li>@Html.ActionLink("Result","Result","Product")</li> 
    </ul> 
    <div id="fragment-1"> 
     @{ 
      var viewModelA = Model.Where(c => c.GetType() == typeof(WebMvcUI.Models.ModelA)).First(); 
      var viewModelB = Model.Where(c => c.GetType() == typeof(WebMvcUI.Models.ModelB)).First(); 
      var viewModelC = Model.Where(c => c.GetType() == typeof(WebMvcUI.Models.ModelC)).First(); 
     } 
     @Html.Partial("viewA", viewModelA) 
     @Html.Partial("viewB", viewModelB) 
     @Html.Partial("viewC", viewModelC) 
    </div> 
    <div id="fragment-2"> 
     Lorem ipsum dolor... 
    </div> 
</div> 

지금까지 너무 좋아. 사용자가 마지막 탭을 클릭하면 내 ProductController에 결과 작업이 호출됩니다. 그리고 여기 내 질문 : 내 부분보기의 모든 양식 정보를 수집하는 가장 좋은 방법은 컨트롤러에 다시 보내고 내 viewModels을 업데이 트하는 무엇입니까?

의견을 보내 주셔서 감사합니다.

답변

0

이것은 나의 현재 솔루션이다
(내 모듈은 하나 개의 형태 공유 및 표현 자 객체를 세션에 저장되어있는)

JQuery와 :

$('#tabs').bind('tabsselect', function (event, ui) { 
     var formToSubmit = $('form:first'); 
     var jqxhr = $.post(formToSubmit.attr('action'), formToSubmit.serialize(), 
      function ShowResult(data) { 
       $("#fragment-2").html(data); 
      } 
     ); 
    }); 

컨트롤러 :

[HttpPost] 
    public ActionResult Result(FormCollection form) 
    { 
     viewModelA = (ViewModelA)Presenter.Modules.Where(c => c.GetType() == typeof(WebMvcUI.Models.ViewModelA)).First(); 
     viewModelB = (ViewModelB)Presenter.Modules.Where(c => c.GetType() == typeof(WebMvcUI.Models.ViewModelB)).First(); 

     TryUpdateModel<ViewModelA>(viewModelA, form); 
     TryUpdateModel<ViewModelB>(viewModelB, form); 

     TransactionResult result = Presenter.CheckBusinessRules(true); 

     if (result.IsDirty) 
     { 
      return Content(result.Message); 
     } 

     return PartialView(); 
    } 
관련 문제