2011-11-30 186 views
4

我希望實現的基本功能是在選擇下拉列表項目時更新表格的內容。當用戶進行新選擇並從數據庫檢索新信息並重新填充表格時,這將會更新。在ASP.Net中渲染局部視圖使用Ajax的MVC3 Razor

另外值得一提的是,我想要的.change()的DropDownListFor與給ajaxForm中不包含工作,但在其他地方出現在頁面上(當然以另一種形式)

要做到這一點我看着這個問題:Rendering partial view dynamically in ASP.Net MVC3 Razor using Ajax call to Action哪個能夠做好我想要做的事情。

到目前爲止,我有一個控制器方法,可處理填充定製視圖模型的局部視圖:

[HttpPost] 
    public ActionResult CompanyBillingBandDetails(int id = 0) 
    { 
     var viewModel = new BillingGroupDetailsViewModel(); 
     var billingGroupBillingBands = 
      _model.GetAllRecordsWhere<BillingGroupBillingBand>(x => x.BillingGroupId == id).ToList(); 

     foreach (var band in billingGroupBillingBands) 
     { 
      viewModel.BillingBands.Add(band.BillingBand); 
     } 

     return PartialView("BillingGroupDetailsPartial", viewModel); 
    } 

視圖模型我想填充每個電話:

public class BillingGroupDetailsViewModel 
    { 
     public List<BillingBand> BillingBands { get; set; } 
    } 

強類型模型我使用作爲用於局部視圖

public class BillingBandsObject 
    { 
     public int BillingBandId { get; set; } 
     public int RangeFrom { get; set; } 
     public int RangeTo { get; set; } 
     public Decimal Charge { get; set; } 
     public int BillingTypeId { get; set; } 
     public bool Delete { get; set; } 
    } 

的雜色一個模型人查看填充和回報:

@model xxx.xxx.DTO.Objects.BillingBandsObject 


<tr> 
    <td> 
     @Html.DisplayTextFor(x => x.RangeFrom) 
    </td> 
</tr> 
<tr> 
    <td> 
     @Html.DisplayTextFor(x => x.RangeTo) 
    </td> 
</tr> 
<tr> 
    <td> 
     @Html.DisplayTextFor(x => x.Charge) 
    </td> 
</tr> 

的頁面的這一部分的剃刀代碼:

<table> 
     <thead> 
      <tr> 
       <th> 
        Range From 
       </th> 
       <th> 
        Range To 
       </th> 
       <th> 
        Charge 
       </th> 
      </tr> 
     </thead> 
    <tbody> 

    @using (Ajax.BeginForm("CompanyBillingBandDetails", new AjaxOptions() { UpdateTargetId = "details", id = "ajaxform" })) 
    { 
    <div id="details"> 
     @Html.Action("CompanyBillingBandDetails", new { id = 1 }) 
    </div> 
    } 

    </tbody> 
</table> 

,最後我解除幾乎直接從Darin的回答功能:

$(function() { 
     $('#billinggrouplist').change(function() { 
      // This event will be triggered when the dropdown list selection changes 

      // We start by fetching the form element. Note that if you have 
      // multiple forms on the page it would be better to provide it 
      // an unique id in the Ajax.BeginForm helper and then use id selector: 
      var form = $('#ajaxform'); 

      // finally we send the AJAX request: 
      $.ajax({ 
       url: form.attr('action'), 
       type: form.attr('method'), 
       data: form.serialize(), 
       success: function (result) { 
        // The AJAX request succeeded and the result variable 
        // will contain the partial HTML returned by the action 
        // we inject it into the div: 
        $('#details').html(result); 
       } 
      }); 
     }); 
    }); 

目前我已經與許多錯誤作鬥爭,目前我面臨着:

「執行處理程序'System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper'的子請求時出錯。」

但是,我覺得我對整個問題的理解可能缺乏。

任何幫助表示讚賞!

+0

您應該添加圍繞相關操作方法的控制器定義。 –

+0

是否存在內部異常? –

+0

@ChrisMarisic我不明白爲什麼?我正在使用的唯一類變量是「_model」,它是我正在使用的存儲庫的服務層,並且在那裏沒有問題。我誤解你了嗎? – M05Pr1mty

回答

0

此錯誤表示在呈現子視圖時出現異常。可能與你的數據有關,即。 NulLReferenceException

只需附加您的調試器並設置爲在拋出異常時中斷。

+0

我只能將此問題調試到某個特定點。 Ajax表單中的@ Html.ActionLink通過調用我的DI框架中的GetControllerInstance開始加載,但之後崩潰到我提到的異常。 – M05Pr1mty

+0

@MattTolliday - 只需附加調試器並在動作開始時設置一個斷點。 –

相關問題