2014-02-05 28 views
0

這就是我目前的視圖。AjaxForms:有些工作不是

@model DatePicker.Models.ViewModels.Appointment.CreateAppointmentSelectPersons 
@{ 
    ViewBag.Title = "Create"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
    <link href="~/Content/themes/base/minified/jquery-ui.min.css" rel="stylesheet"/> 
} 
@*Main Form*@  
@using(Ajax.BeginForm("Create","Appointment", new AjaxOptions{HttpMethod = "POST"})) 
{ 
    @Html.AntiForgeryToken() 
    <h4>Step 2</h4> 
    <hr /> 
    @Html.ValidationSummary() 
    @Html.HiddenFor(m=>m.AppointmentId) 

    @*Child Form1*@ 
    using (Ajax.BeginForm("AddAttendeeManual", "Attendee", new AjaxOptions { HttpMethod = "POST", OnSuccess = "doneSuperOffice" })) 
     { 
      @Html.HiddenFor(m=>m.SelectedManualEmail.AppointmentId) 
      <div class="form-group"> 
       @Html.LabelFor(m => m.SelectedManualEmail.Email, new { @class = "col-md-2 control-label" }) 
       <div class="col-md-8 input-group"> 
        @Html.TextBoxFor(m => m.SelectedManualEmail.Email, new { id = "Email", @class = "form-control",PlaceHolder="Email"}) 
        <input type='submit' id="btnEmail" class="btn btn-default" value="Add>>" /> 
       </div> 
      </div> 
     } 


     if (Model.IsSuperOfficeConnected) 
     { 
      @*Child Form 2*@ 
      using (Ajax.BeginForm("AddAttendeeSuperOffice","Attendee",new AjaxOptions{HttpMethod = "POST", OnSuccess = "doneManualEmail"})) 
      { 
       @Html.HiddenFor(m => m.SelectedSuperOfficeEmail.FirstName, new { id = "SelectedSuperOfficeEmail_FirstName" }) 
       @Html.HiddenFor(m => m.SelectedSuperOfficeEmail.LastName, new { id = "SelectedSuperOfficeEmail_LastName" }) 
       @Html.HiddenFor(m=>m.SelectedSuperOfficeEmail.AppointmentId) 
       @Html.HiddenFor(m => m.SelectedSuperOfficeEmail.SuperOfficePersonId, new { id = "SelectedSuperOfficeEmail_SuperOfficePersonId" }) 
       <div class="form-group"> 
        @Html.LabelFor(m => m.SelectedSuperOfficeEmail.Email, new { @class = "col-md-2 control-label" }) 
        <div class="col-md-8 input-group"> 
         @Html.TextBoxFor(m => m.SelectedSuperOfficeEmail.Email, new { id = "SelectedSuperOfficeEmail", @class = "form-control", PlaceHolder = "Search in SuperOffice" }) 

         <input type='submit' id="btnSuperOffice" class="btn btn-default" value="Add>>" /> 
        </div> 
       </div> 

      } 
     } 
     if (Model.IsInternalAddressBookEmpty) 
     { 
      @*Child Form3*@ 
      using (Ajax.BeginForm("AddAttendeeInternalAddressBook", "Attendee", new AjaxOptions { HttpMethod = "POST", OnSuccess = "doneInternalAddressbook" })) 
      { 
       @Html.HiddenFor(m=>m.SelectedAddressBookPerson.FirstName) 
       @Html.HiddenFor(m=>m.SelectedAddressBookPerson.LastName) 
       @Html.HiddenFor(m=>m.SelectedAddressBookPerson.AppointmentId) 
       <div class="form-group"> 
        @Html.LabelFor(m => m.SelectedAddressBookPerson.Email, new { @class = "col-md-2 control-label" }) 
        <div class="col-md-8 input-group"> 
         @Html.TextBoxFor(m => m.SelectedAddressBookPerson.Email, new { id = "SelectedAddressBookPerson", @class = "form-control", PlaceHolder = "Search in AddressBook..." }) 

         <input type='submit' id="btnAddressBook" class="btn btn-default" value="Add>>"> 
        </div> 
       </div>    
      } 

     } 


     <div class="form-group"> 
     <div class="col-md-offset-2 col-md-10"> 
      <input class="btn btn-default" value="<<Previous"/> 
      <input type="submit" class="btn btn-default" value="Next>>" /> 
     </div> 
    </div> 

} 
<style> 
    .ui-autocomplete-loading { 
     background: url('/Content/themes/base/images/ui-anim_basic_16x16.gif') no-repeat right center; 
    } 

</style> 
@section Scripts{ 
    @Scripts.Render("~/bundles/jqueryval") 
    @Scripts.Render("~/Scripts/jquery-ui-1.10.4.min.js") 
    @Scripts.Render("~/Scripts/jquery.unobtrusive-ajax.min.js") 

    <script type="text/javascript">  
     $(function() { 

      $("#SelectedSuperOfficeEmail"). 
       autocomplete({ 
        source: '/Appointment/SuperOfficePerson', 
        minLength: 1, 
        select: function (event, ui) { 
         $('#SelectedSuperOfficeEmail').val(ui.item.value); 
         $(@Html.IdFor(m => m.SelectedSuperOfficeEmail.FirstName)).val(ui.item.FirstName); 
         $(@Html.IdFor(m => m.SelectedSuperOfficeEmail.LastName)).val(ui.item.LastName); 
         $(@Html.IdFor(m => m.SelectedSuperOfficeEmail.SuperOfficePersonId)).val(ui.item.ExternalPersonId); 
        } 

      }); 

      $("#SelectedAddressBookPerson").autocomplete({ 
       source: '/Appointment/AddressBookPerson', 
       minLength: 1, 
       select: function(event,ui) { 
        $(@Html.IdFor((m=>m.SelectedAddressBookPerson.FirstName))).val(ui.item.FirstName); 
        $(@Html.IdFor(m=>m.SelectedAddressBookPerson.LastName)).val(ui.item.LastName); 
       }, 
      }); 

     }); 
     function doneManualEmail() { 
      $("#Email").val(''); 
     } 
     function doneSuperOffice() { 
      $("#SelectedSuperOfficeEmail").val(''); 
     } 
     function doneInternalAddressBook() { 
      $("#SelectedAddressBookPerson").val(''); 
     } 

    </script> 
} 

而且控制器:

[HttpPost] 
public void AddAttendeeSuperOffice(CreateAppointmentSelectPersons superOfficePerson) 
{ 
    _attendeeRepository.AddSuperOfficeAttende(superOfficePerson.SelectedSuperOfficeEmail.AppointmentId, 
     superOfficePerson.SelectedSuperOfficeEmail.FirstName, 
     superOfficePerson.SelectedSuperOfficeEmail.LastName, 
     superOfficePerson.SelectedSuperOfficeEmail.Email, 
     superOfficePerson.SelectedSuperOfficeEmail.SuperOfficePersonId); 

} 

[HttpPost] 
public void AddAttendeeInternalAddressBook(CreateAppointmentSelectPersons internalAddressbookPerson) 
{ 
    _attendeeRepository.AddInternalAddressBookAttendee(
     internalAddressbookPerson.SelectedAddressBookPerson.AppointmentId, 
     internalAddressbookPerson.SelectedAddressBookPerson.FirstName, 
     internalAddressbookPerson.SelectedAddressBookPerson.LastName, 
     internalAddressbookPerson.SelectedAddressBookPerson.Email); 

} 

[HttpPost] 
public void AddAttendeeManual(CreateAppointmentSelectPersons manualEmail) 
{ 
    _attendeeRepository.AddManualAttendee(manualEmail.SelectedManualEmail.AppointmentId, 
     manualEmail.SelectedManualEmail.Email); 

} 

這裏,Child Form2作品完美,它被點擊按鈕和文本框OnSuccess得到空的,正是因爲我想叫我的控制器。

問題1:對於Child Form3它調用控制器,但OnSuccess,不使文本框爲空。

Problem2:對於Child Form1它不叫我的控制器可言,沒有任何反應,當我點擊按鈕

回答

0

對於初學者來說,你可能想要麼創建一個done()功能爲每個這些形式,或者通過它已經完成的表格(除非每個表格在執行後都執行相同的事情)。例如

@* Child Form 1 *@ 
new AjaxOptions { ... OnSuccess = "form1Done()" ... } 
@* Child Form 2 *@ 
new AjaxOptions { ... OnSuccess = "form2Done()" ... } 
@* Child Form 3 *@ 
new AjaxOptions { ... OnSuccess = "form3Done()" ... } 

〜或者〜

@* Child Form 1 *@ 
new AjaxOptions { ... OnSuccess = "done(1)" ... } 
@* Child Form 2 *@ 
new AjaxOptions { ... OnSuccess = "done(2)" ... } 
@* Child Form 3 *@ 
new AjaxOptions { ... OnSuccess = "done(3)" ... } 

其次,還有比OnSuccessAjaxOptions方法更多的選擇。將方法添加到OnFailureOnSuccess可能是有意義的(至少在調試時),以便您可以更深入地瞭解發生的情況。此外,使用您的瀏覽器中的調試器,看看是否正在執行調用。

現在,沒有足夠的信息來解決您的問題,但希望您最終可以通過使用上述內容來解決問題,或者獲取更多信息來更新問題。

如果您確實最終更新了該問題,請對此解答發表評論,我會盡我所能提供幫助。

+0

我這樣做,仍是不調用jQuery的功能我想,U可以看看更新的代碼可能? – Cybercop

+0

您應該像完成自動完成腳本一樣在完成的調用中引用'@ Html.IdFor'。 –

相關問題