ASP.NET MVC jQueryUI DatePicker не работает при использовании AJAX.BeginForm - PullRequest
5 голосов
/ 26 марта 2009

У меня есть частичное представление ASP.NET MVC, которое содержит Html.TextBox, настроенный для использования средства выбора даты из JQueryUI. Это достигается путем обеспечения стиля .datepicker. Это все работало нормально. Однако я изменил свои формы на Ajax.BeginForm и включил Ajax.ActionLink, который отображает их после нажатия на ссылку. С добавлением этого DatePicker не отображается. Фактически никакой JavaScript, который раньше работал, теперь даже не вызывается после возвращения частичного представления из контроллера. Даже если я помещаю JavaScript / JQuery в само частичное представление, он все равно не использует его. Я действительно смущен, может кто-нибудь, пожалуйста, помогите?

Примеры, показанные ниже

<div id="claims">
        <div id="divViewClaims">
            <% Html.RenderPartial("ViewClaim", Model.Claims ?? null); %>
        </div>
        <br /><br />
        <div id="claim">
            <% Html.RenderPartial("AddEditClaim", new Claim()); %>          
        </div>
    </div>

Action Link, когда clickon вызывает Controller Action для возврата PartialView, JavaScript вызывает OnSuccess, но ничего больше, что ранее было подключено функцией document.ready. Все мои скрипты находятся в отдельных файлах и упоминаются на главной странице.

<%= Ajax.ActionLink(string.Format("Add A{0} Claim", Model.Count > 0 ? "nother" : string.Empty), "AddClaim", "Driver", new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "claim", OnSuccess="showAddClaim" }, new { @class = "ControlLink" })%>

Действие контроллера

public ActionResult AddClaim()
{
      return PartialView("AddEditClaim", new Claim());
}

Частичное представление, в котором отображается текстовое поле со стилем, установленным на указатель даты

<% var ajaxOptions = new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "divViewClaims", InsertionMode = InsertionMode.Replace, OnSuccess="hideAddClaim" }; %>
        <% using (Ajax.BeginForm("AddEditClaim", "Claim", ajaxOptions, new { @name = "ClaimControl", @id = "ClaimControl" }))
           { %>

    <fieldset>  
        <legend><%= Model.Id==0?"Add":"Edit" %> Claim</legend> 
        <p>
            <label for="Title">Claim Date</label>
            <%= Html.TextBox("Date", Model.Date.ToString().TrimEnd('0', ':', ' ') ?? "", new { @class = "datepicker" })%>  
        </p>

Я ценю любую помощь в этом.

Ответы [ 2 ]

3 голосов
/ 03 ноября 2009

Если элемент создан после document.ready, вы должны повторно сопоставить элемент с jQuery.

Проверить jQuery Live

1 голос
/ 08 сентября 2010

Что мне подходит, так это использование свойства OnSuccess из AjaxOptions. Итак, ваш код может быть таким:

using (Ajax.BeginForm("AddEditClaim", "Claim", ajaxOptions, new { @name = "ClaimControl", @id = "ClaimControl", OnSuccess="the_javascript_function_below" })

где the_javascript_function - это имя функции, которая делает это:

$(".datepicker").datepicker();
...