2009-06-10 38 views
2

方案更新數據纔算是Ajax方式

我有一個頁面上的下拉列表, 現在它的變化事件中,我會 要從數據庫 拉一些數據然後顯示它。

我能夠做回發,我 嘗試使用Ajax.Beginform()但它 仍然做回發。

<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script> 

    <%using (Ajax.BeginForm("UpdatePanel", new AjaxOptions { UpdateTargetId = "divDetails" })) 
      {%> 
     <%=Html.DropDownList("Dinner", (SelectList)ViewData["Dinner"], new { onchange = "this.form.submit();" })%> 
     <div id="divDetails"> 
      <fieldset> 
       <legend>Details</legend> 
       <% if (Model != null) 
        {%> 
       <p> 
        ID: 
        <%= Html.Encode(Model.ID)%> 
       </p> 
       <p> 
        Title: 
        <%= Html.Encode(Model.Title)%> 
       </p> 
       <%} %> 
      </fieldset> 
      <%} %> 

讚賞任何幫助。

+0

我感興趣的使用ajax.beginform和爲什麼上面的代碼不起作用? – Miral 2009-06-10 15:23:52

回答

1

你有沒有考慮過使用jQuery?我爲我的解決方案使用jQuery.post。 這裏是爲我工作的例子:

jQuery(document).ready(function() { 

    // Dropdown or select list 
    jQuery('#countryListBox').change(function(){ populateCityListBox(); }); 

    function populateCityListBox() 
    { 
    //Get ID for selected country 
    var ctryID = jQuery("select#countryListBox").val(); 

    jQuery.post("inclyde/jquery_get_data.php", { instance: 'getCitiesByCountry', countryID: ctryID }, 
     function(data) 
     { 
      //Process data and store it in var newContent. 
      // Then bind data to the div you wish to present the content 
      jQuery("div.myNewText").html(newContent); 

     }, "json"); 
    } 
}); 

我有一個很難讓.NET的Ajax工作。在我發現jQuery之後,事情非常甜美:)

+0

不知道爲什麼PHP被MVC問題引用 – Phil 2012-06-29 05:08:57

2

我相信你的問題與BeginForm是MVC總是做整頁回發 - 至少在我的經驗。如果你想要「部分」回發,你需要使用javascript和webservices。

我正在使用GeoIP。這是我的頁面看起來像:

<p> 
<label for="country">Country</label> 
<%= Html.DropDownList("country", new SelectList(Model.Countries, "CountryId", "Name", Model.DefaultCountry.CountryId))%> 
<%= Html.ValidationMessage("country")%> 
</p> 

<p> 
<label for="subdivision">Subregion</label> 
<%= Html.DropDownList("subdivision", new SelectList(Model.Subdivisions, "SubdivisionId", "Name", Model.DefaultSubdivision.SubdivisionId)) %> 
<%= Html.ValidationMessage("subdivision")%> 
</p> 

<script type="text/javascript"> 

    $('#country').change(function() { 

     $('#subdivision').children().remove(); 

     var countryId = $("#country > option:selected").val(); 

     Sys.Net.WebServiceProxy.invoke 
      ( 
       '/WebServices/Regions.asmx', 
       "GetSubdivisions", 
       false, 
       { countryId: countryId }, 
       addressControl_bindOptionResults 
      ); 
    }); 

    function addressControl_bindOptionResults(data) 
    { 
     for (var x = 0; x < data.length; x++) { 
      $("#subdivision").append($('<option></option>').val(data[x].Id).html(data[x].Name)); 
     } 
    } 

</script> 

我的web服務看起來像這樣。當添加一個新的web服務,確保您取消註釋類聲明上面的屬性:

[System.Web.Script.Services.ScriptService] 

請記住,你的返回的對象必須是可序列化。

[WebMethod] 
     public Subdivision[] GetSubdivisions(int countryId) 
     { 
      if (this.repository == null) 
      { 
       Resolve(); 
      } 

      List<Subdivision> subdivisions = new List<Subdivision>(repository.GetActiveSubdivisionsDto(countryId)); 

      return subdivisions.ToArray(); 
     } 

忽略我的web服務的一些內部工作。我爲我的數據層使用了統一,Nfluent和NHibernate,但基本相同。調用數據庫,返回對象,並返回一個可序列化的數據傳輸對象列表(我的名字和Id)。

0

問題是onchange =「this.form.submit();」。 當您form.submit提交表單()阿賈克斯 - MS的腳本放置一個

<input type="submit" value="submit" /> 

形式的刪除form.submit不踢 檢查()。控制器中的請求將是Request.IsAjaxRequest = true。

我不知道如何以一種很好的方式擺脫提交按鈕 - 我使它不可見,並通過Javascript點擊它的onchange。

這是我第一次在MVC中使用ajax。然後我用jquery,很高興。

-1

老話題,但我有這個同樣的問題,終於想通了:

變化:

onchange = "this.form.submit();" 

到:

onchange = "$(this.form).submit();"