PartialView внутри модального Popup

Я пытаюсь открыть PartialView внутри модального Popup jquery для события щелчка по ссылке в моем проекте MVC, Umbraco. Частичное представление загружается нормально, однако отправка кнопки внутри модального всплывающего окна вызывает корректный вызов ActionMethod, но затем вместо открытия модального всплывающего окна в том же родительском окне он запускает ее в новом окне. Не уверен, что я здесь делаю не так. Ниже мой код:

Частичный вид

  @inherits Umbraco.Web.Mvc.UmbracoViewPage<Source.Models.SchoolFindYouModel>
<script>
    $(function () {
        $("#dialog-modal-school").dialog({
            autoOpen: false,
            width: 650,
            height: 500,
            show: {
                effect: "drop",
                duration: 1000
            },
            hide: {
                effect: "drop",
                duration: 1000
            }
        });

        $("#modal-opener-school").click(function () {
            $("#dialog-modal-school").dialog("open");
        });


    });
</script>

<a href="#" id="modal-opener-school">Let Schools find you</a>

<div id="dialog-modal-school" title="Let Schools find you">

    <p>Upload your CV/Resume for free.</p>

        @using (Html.BeginForm("SchoolFindsYou", "School", FormMethod.Post,  new { enctype = "multipart/form-data" }))

        {
        <div class="editor-label">
            @Html.LabelFor(m => m.email, "Email address")

        </div>
        <div class="editor-field">
            @Html.TextBoxFor(m => m.email)
            @Html.ValidationMessageFor(model => model.email)
        </div>
        <div class="editor-label">
            @Html.LabelFor(m => m.password, "Password")
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(m => m.password)
            @Html.ValidationMessageFor(model => model.password)
        </div>
            <div class="editor-label">
                @Html.LabelFor(m => m.search, "Search keyword")
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(m => m.search)
                @Html.ValidationMessageFor(model => model.search)
            </div>

            <div class="editor-label">
                @Html.LabelFor(m => m.location, "Location")
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(m => m.location)
                @Html.ValidationMessageFor(model => model.location)
            </div>

            <input type="file" name="attachment" id="attachment" />
            @Html.ValidationMessageFor(model => model.attachment)

            <br />
            <input type="submit" name="btnSchoolFindYou" value="Upload CV/Resume" id="btnSchool"/>
            <br />
            <br />
            <p>By clicking activate jobs you confirm that you agree to our <a href="/independent/TandC.aspx">terms and conditions</a> and <a href="/independent/Privacy.aspx">privacy policy</a></p>

    }
</div>
@if (!ViewData.ModelState.IsValid)
{
    <script type="text/javascript">
        $(document).ready(function () {
            $("#modal-opener-school").click();
        });

    </script>
}

PartialView Cotroller

   public class SchoolController : Umbraco.Web.Mvc.SurfaceController
    {
        [HttpGet]
        public ActionResult SchoolFindsYou()
        {
            SchoolFindYouModel s = new SchoolFindYouModel();
            return PartialView("_PartialSchoolFindYou", s);
        }

        [HttpPost]
        public ActionResult SchoolFindsYou(SchoolFindYouModel SchoolFindYou)
        {
            SchoolFindYouModel s = new SchoolFindYouModel();
            if (ModelState.IsValid)
            {
                if (Request.Files.Count > 0)
                {
                    var file = Request.Files[0];
                    if (file != null && file.ContentLength > 0)
                    {
                        var fileName = Path.GetFileName(file.FileName);
                        var path = Path.Combine(Server.MapPath("~/media/cv/"), fileName);
                        file.SaveAs(path);
                    }
                }
                return PartialView("_PartialSchoolFindYou", s);
            }
            else
            {
                return PartialView("_PartialSchoolFindYou", s);
            }
        }
    }

После обратной передачи он открывает PartalView (вместо моего parentView внутри модального всплывающего окна).

http://localhost:49721/umbraco/Surface/School/SchoolFindsYou

1 ответ

Решение

Это потому, что вы делаете пост http и перенаправляете запрос на частичный просмотр. Вам нужно вернуть родительское представление, которое содержит это частичное представление, и ваше частичное представление будет отображено внутри этого родительского представления.

Так что вместо return PartialView("_PartialSchoolFindYou", s); в вашем контроллере, вы должны return View(s);и внутри этого представления где-то вы должны иметь

@Html.Partial("_PartialSchoolFindYou", s);

Другие вопросы по тегам