Визуализация частичного представления в ASP.Net MVC3 Razor с использованием Ajax - PullRequest
4 голосов
/ 30 ноября 2011

Базовая функциональность, которую я хочу реализовать, заключается в том, что содержимое таблицы обновляется при выборе элемента раскрывающегося списка. Это обновится, когда пользователь сделает новый выбор, получит новую информацию из базы данных и снова заполнит таблицу.

Стоит также отметить, что DropDownListFor, с которым я хочу работать .change (), не содержится в AjaxForm, но появляется в другом месте страницы (по общему признанию, в другой форме)

Чтобы достичь этого, я посмотрел на этот вопрос: Динамическое рендеринг частичного представления в ASP.Net MVC3 Razor с использованием Ajax-вызова 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);
    }

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>

Код Razor для этого раздела страницы:

    <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>

и, наконец, функция, которую я поднял почти прямо из ответа Дарина:

$(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 '. "

Однако я чувствую, что мое понимание проблемы в целом может быть недостаточным.

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 30 ноября 2011

Эта ошибка означает, что при визуализации вашего дочернего представления произошла исключительная ситуация. Вероятно, что-то связано с вашими данными, т.е. NulLReferenceException.

Просто подключите ваш отладчик и установите его на разрыв при возникновении исключения.

...