Проблема с RenderPartial в Модальном окне Telerik с использованием Ajax - PullRequest
1 голос
/ 08 марта 2012

У меня распад мозга, так как я объединяю расширение Telerik с моим собственным набором jQuery в своем проекте MVC3.

Я хочу иметь возможность вызывать ActionResult с помощью Ajax следующим образом:

    function showDialog(arg) {
    var url = '/Home/ReserveRent/';
    alert(arg);
    $.ajax({
            type: "GET",
            url: url,
            data: { id: arg },
            dataType: "html",
            success: function(data) { $('#RenderRent').html(data); },
            error: function(data) { alert(url+'  '+arg+'   '+data); }
        });
    var rentPayment = $('#RenderRent').html();
    $('#ModalPay' + arg).html(rentPayment);
    $('#Window' + arg).data('tWindow').center().open();
}

При загрузке страницы я создаю несколько скрытых окон Telerik, я хочу вызвать каждую из них с помощью моего jQuery выше. На моей странице Razor есть два тега Div:

    <div>
@foreach (ShowAvailability availability in Model.ShowAvailabilities)
{
    foreach (var salesLine in availability.SalesLinesForSale)
    {
        SalesLine line = salesLine;
        Html.Telerik().Window()
        .Name("Window"+line.SalesLineID)
        .Title("Submit feedback")
        .Content(@<text>
            @using (Html.BeginForm("PayRent", "Payment", FormMethod.Post, new { id = "feedback-form" }))
            {
                <p class="note">This is <strong>salesLine</strong> @line.SalesLineID.</p>

                <div id='"ModalPay"+@line.SalesLineID'>
                    <!--TODO: Here will rendered Html be copied between Divs-->
                </div>
                <div class="form-actions">
                    <button type="submit" class="t-button t-state-default">Submit feedback!</button>
                </div>
            }
            </text>)
        .Buttons(b => b.Close())
        .Width(400)
        .Draggable(true)
        .Modal(true)
        .Visible(false)
        .Render();
    }
}
</div>
<div id="RenderRent" style="display: none;">
    <!-- TODO: Render payment info-->
    @{Html.RenderPartial("ReserveRent");}
</div>

Как вы можете видеть в моем Ajax-запросе, я отобразлю результат в теге Div, помеченном как #RenderRent. Поэтому я хочу заменить этот тег Div специальным тегом Div в окне Telerik, и теперь в окне должна быть правильная информация о модели. Мое действие контроллера выглядит так:

        public ActionResult ReserveRent(int salesLineId)
    {
        var salesLine = _salesLineLogic.GetSalesLine(salesLineId);

        if (!salesLine.IsAvailable)
        {
            ViewBag.AvailableSalesLine = @"Þessi orlosfeign er því miður ekki lengur til leigu á þessu tímabili.";
            return RedirectToAction("Index", "Home");
        }

        salesLine.IsAvailable = false;
        _salesLineLogic.SaveToDatabase();

        var payment = new Payment { FK_SalesLineID = salesLineId, EditedBy = "PayRent.cshtml (GET)", EditedOn = DateTime.Now };

        return PartialView(new HomeFormViewModel(payment));
    }

По какой-то причине аргумент не получен из запроса Ajax, salesLineId всегда равен NULL. Может кто-нибудь заметить, что я делаю неправильно с AjaxRequest, или если функция jQuery не объявлена ​​правильно?

1 Ответ

0 голосов
/ 08 марта 2012

Ваш ajax звонок содержит неверные данные. Свойство внутри литерала объекта (id) не соответствует salesLineId в действии контроллера.

$.ajax({
    type: "GET",
    url: url,
    data: { salesLineId: arg },
    dataType: "html",
    success: function(data) { $('#RenderRent').html(data); },
    error: function(data) { alert(url+'  '+arg+'   '+data); }
});

Обновление

В этой строке также есть что-то странное

<div id='"ModalPay"+@line.SalesLineID'>

Это должно быть что-то вроде

<div id='ModalPay@(line.SalesLineID)' >
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...