У меня распад мозга, так как я объединяю расширение 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 не объявлена правильно?