MVC - Кажется, не может отправлять действия контроллера, используя помощника AJAX - PullRequest
0 голосов
/ 11 октября 2011

У меня проблемы с отправкой модели в действие контроллера с помощью помощника AJAX.Действие контроллера вообще не срабатывает.

Код:

Просмотр:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ServiceNumberModel>" %>

<div id="ServiceNumberPanel">
    <h1>
        Based on your location we offer different plans</h1>
    <% using (Ajax.BeginForm("AvailablePlans", "ServiceCheck", new AjaxOptions { UpdateTargetId = "AdslPlansPanel", HttpMethod = "Post" } ))
       { %>
            <%=Html.ValidationSummary(true)%>
            Your Phone Number:
            <%=Html.TextBoxFor(m => m.HomePhoneNumber)%><br />
            <%=Html.CheckBoxFor(m => m.BundleWithHomePhone)%>Bundle with Home Phone? <br/>
            <input id="CheckServiceAvailabilityButton" type="submit" value="Check"/>
    <% } %>
</div>

Модель:

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace ServiceCheck
{
    public class ServiceNumberModel
    {
        [Required(ErrorMessage = "Please enter your phone number.")]
        [RegularExpression(@"^[0]\d{9}$", ErrorMessage = "Please enter your phone number, including the area code")]
        [DisplayName("Phone Number:")]
        public string HomePhoneNumber { get; set; }


        public bool BundleWithHomePhone { get; set; }
    }
}

Контроллер:

 [HttpPost]
        public ActionResult AvailablePlans(ServiceNumberModel serviceNumberModel)
        {
            if (serviceNumberModel.BundleWithHomePhone)
                return ReturnAvailableBundledPlans(serviceNumberModel);

            return View("Index");
        }

Сгенерированный HTML:

<div id="ServiceNumberPanel">
    <h1>
        Based on your location we offer different plans</h1>
    <form action="/ServiceCheck/AvailablePlans" data-ajax="true" data-ajax-method="Post" data-ajax-mode="replace" data-ajax-update="#AdslPlansPanel" id="form0" method="post">
            Your Phone Number:
            <input data-val="true" data-val-regex="Please enter your phone number, including the area code" data-val-regex-pattern="^[0]\d{9}$" data-val-required="Please enter your phone number." id="HomePhoneNumber" name="HomePhoneNumber" type="text" value="" /><br />
            <input data-val="true" data-val-required="The BundleWithHomePhone field is required." id="BundleWithHomePhone" name="BundleWithHomePhone" type="checkbox" value="true" /><input name="BundleWithHomePhone" type="hidden" value="false" />Bundle with Home Phone? <br/>

            <input id="CheckServiceAvailabilityButton" type="submit" value="Check"/>
    </form>
</div>

Поведение: Когда я нажимаю на кнопку "Отправить", я получаю сообщение об ошибке "Ресурс не найден":

Ресурс не найден.Описание: HTTP 404. Ресурс, который вы ищете (или одна из его зависимостей), мог быть удален, изменилось его имя или временно недоступен.Пожалуйста, просмотрите следующий URL и убедитесь, что он написан правильно.

Запрошенный URL: / ServiceCheck

Интересно, что когда я смотрю на источник с помощью firebug, я не вижу теги формы:

<div class="ExistingContent">
<h1>ServiceCheck</h1>
<div id="ServiceNumberPanel">
<div id="ServiceNumberPanel">
<h1> Based on your location we offer different plans</h1>
Your Phone Number:
<input id="HomePhoneNumber" type="text" value="" name="HomePhoneNumber" data-val-required="Please enter your phone number." data-val-regex-pattern="^[0]\d{9}$" data-val-regex="Please enter your phone number, including the area code" data-val="true">
<br>
<input id="BundleWithHomePhone" type="checkbox" value="true" name="BundleWithHomePhone" data-val-required="The BundleWithHomePhone field is required." data-val="true">
<input type="hidden" value="false" name="BundleWithHomePhone">
Bundle with Home Phone?
<br>
<input id="CheckServiceAvailabilityButton" type="submit" value="Check">
</div>
<div id="Div1">
</div>
</div>

Кроме того, если я изменю представление для использования помощника HTML, он без проблем попадет в контроллер:

<div id="Div1">
    <h1>
        Based on your location we offer different plans</h1>
    <% using (Html.BeginForm("AvailablePlans", "ServiceCheck"))
       { %>
            <%=Html.ValidationSummary(true)%>
            Your Phone Number:
            <%=Html.TextBoxFor(m => m.HomePhoneNumber)%><br />
            <%=Html.CheckBoxFor(m => m.BundleWithHomePhone)%>Bundle with Home Phone? <br/>
            <input id="Submit1" type="submit" value="Check"/>
    <% } %>
</div>

Пожалуйста, помогите !!!

1 Ответ

0 голосов
/ 13 октября 2011

Мне удалось найти проблему.

На главной странице, которую я использовал, которая используется несколькими приложениями, кто-то добавил форму румян:

<body>
    <form id="form1" runat="server">
    <uc1:header id="Header1" runat="server" />
    <div class="ExistingContent">
        <asp:contentplaceholder id="MainContent" runat="server" />
    </div>
    <uc2:footer id="Footer1" runat="server" />
    </form>
</body>

Этоозначало, что я пытался отправить форму из формы, а рамки по умолчанию передавались родителю.

После удаления все стало работать как положено.

...