2013-04-10 85 views
0

是否可以從控制器中的方法刷新編輯視圖?從局部視圖刷新編輯視圖

我有一個局部視圖,它會對控制器進行回調。從這種方法我想刷新我的整個編輯視圖基於我傳遞給此方法的值。

public ActionResult AssignPractice(Guid id, Guid doctorId) 
    { 
     var doctorViewModel = Map.This(_doctorService.GetDoctor(doctorId)).To<DoctorViewModel>(); 
     AddSelectLists(doctorViewModel); 
     var practice = _practiceService.GetPractice(id); 
     doctorViewModel.Practice = new PracticeSelectListViewModel() 
      {Item = practice, DoctorId = doctorId, SelectList = _practices}; 
     return View("Edit", doctorViewModel); 
    } 

由於提前,

編輯:

我會闡述一點點。我面臨的情況如下:

醫生需要分配一個練習,這不僅影響醫生practiceId不會影響我的doctorviewmodel 20其他屬性,他們需要反映在視圖。也許我是通過尋求上述解決方案來看待這種錯誤的方式。

+0

什麼客戶端事件被觸發呢?表單提交?點擊表格外的按鈕?標記,請... – 2013-04-10 15:11:53

+1

http://stackoverflow.com/questions/7478925/refreshing-parent-view-when-a-partial-views-form-is-submitted。 – rashleighp 2013-04-10 15:12:51

+0

我正在使用第三方控件。 'settings.CallbackRouteValues = new {Controller =「Doctor」,Action =「AssignPractice」,id = Model.Item.Id,doctorId = Model.DoctorId}; settings.Properties.ClientSideEvents.SelectedIndexChanged =「function(s,e){cbbPractice.PerformCallback();}」;' – Ian 2013-04-10 15:16:07

回答

0

好吧,所以我用了一點所有的解決方案來解決我的情況。

的Javascript:

function Doctor() { 
this.id = null; 
this.FirstName = ""; 
this.LastName = ""; 
this.Code = ""; 
this.PhoneNumber = ""; 
this.PhoneNumber2 = ""; 
this.PhoneNumberActive = 0; 
this.PhoneNumber2Active = 0; 
this.Email = ""; 
this.Practice = new Practice(); 

function AssignPractice() { 

var myModel = new Doctor(); 
myModel.id = Id.value; 
myModel.FirstName = FirstName.lastChangedValue; 
myModel.LastName = LastName.lastChangedValue; 
myModel.Code = Code.lastChangedValue; 
myModel.PhoneNumber = PhoneNumber.lastChangedValue; 
myModel.PhoneNumber2 = PhoneNumber2.lastChangedValue; 
myModel.PhoneNumberActive = PhoneNumberActive.lastChangedValue; 
myModel.PhoneNumber2Active = PhoneNumber2Active.lastChangedValue; 
myModel.Email = Email.lastChangedValue; 
myModel.Practice.id = cbbPractice.lastSuccessValue; 
var postData = JSON.stringify(myModel); 
$.ajax({ 
    url: assignPracticeUrl, 
    type: 'POST', 
    data: postData, 
    success: function (data) { 
     $('#yourFormID').html(data); 
    } 
}); 

查看:

@using (Html.BeginForm("Edit", "Doctor", FormMethod.Post, new { id = "yourFormID" })) 

控制器:

public ActionResult AssignPractice(FormCollection form) 
    { 

     JavaScriptSerializer js = new JavaScriptSerializer(); 
     var doctor = js.Deserialize<Doctor>(form[0]); 
     var doctorViewModel = Map.This(_doctorService.GetDoctor(doctor.Id)).To<DoctorViewModel>(); 


     AddSelectLists(doctorViewModel); 
     var practice = _practiceService.GetPractice(doctor.Practice.Id); 
     var practiceViewModel = Map.This(practice).To<PracticeViewModel>(); 
     doctorViewModel.Practice = new PracticeSelectListViewModel() { Item = practice, SelectList = _practices }; 
     doctorViewModel.FirstName = doctor.FirstName; 
     doctorViewModel.LastName = doctor.LastName; 
     doctorViewModel.PhoneNumber = doctor.PhoneNumber; 
     doctorViewModel.PhoneNumber2 = doctor.PhoneNumber2; 
     doctorViewModel.PhoneNumberActive = doctor.PhoneNumberActive; 
     doctorViewModel.PhoneNumber2Active = doctor.PhoneNumberActive; 
     doctorViewModel.Email = doctor.Email; 
     doctorViewModel.OpeningHours = practiceViewModel.OpeningHours; 
     doctorViewModel.AppointmentHours = practiceViewModel.AppointmentHours; 
     doctorViewModel.AddressViewModel = practiceViewModel.AddressViewModel; 
     doctorViewModel.Website = practiceViewModel.Website; 
     doctorViewModel.Labo = practiceViewModel.Labo; 
     doctorViewModel.KeyChain = practiceViewModel.KeyChain; 
     return PartialView("Edit", doctorViewModel); 
    } 
1

如何'回合調用你的控制器方法trhu JSON,使用jQuery加載函數?你調用你的控制器方法,更新你的ViewModel並返回你的編輯視圖或其他東西。

的jQuery:

$('#buttonToRefresh').click(function() { 
    $('#mainContent').load('@Url.Content("YourAction", "YourController")', $('#yourFormID').serialize()); 
}); 

查看:

<div id="mainContent"> 
    @Html.BeginForm("Action", "Controller", FormMethod.Post, new { id = "yourFormID" }) 
    { 
     // Your content goes here. 
    } 
</div> 

你的控制器保持不變。