MVC 3 Razor AJAX не работает - PullRequest
       2

MVC 3 Razor AJAX не работает

1 голос
/ 04 сентября 2011

В EditPhoto.cshtml:

@model vg_music.Models.images
@{
    ViewBag.Title = "EditPhoto";
}
<h2>
    EditPhoto2</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Ajax.BeginForm(new AjaxOptions{UpdateTargetId = "AjaxDiv"})) {
    @Html.ValidationSummary(true)
    <div id="AjaxDiv">
        @Html.Partial("EditPhotoForm")
    </div>
}
<div>
    @Html.ActionLink("Back to List", "Index")
</div> 

EditPhotoForm.cshtml:

    @model vg_music.Models.images
<fieldset>
            <legend>images</legend>
            @Html.HiddenFor(model => model.id)
            <div class="editor-label">
                @Html.LabelFor(model => model.title)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.title)
                @Html.ValidationMessageFor(model => model.title)
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.comment)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.comment)
                @Html.ValidationMessageFor(model => model.comment)
            </div>
            <div class="editor-label">
                @Html.LabelFor(model => model.filename)
            </div>
            <div class="editor-field">
            <img src="@Url.Content("~/uploads/images/little/"+Model.filename)" alt="@Model.title"/><br />                
            </div>
            <p>
                <input type="submit" value="Сохранить" />
            </p>
        </fieldset> 

PhotosController.cs: ....

[HttpPost]
    public ActionResult EditPhoto(images obj)
    {
        if (ModelState.IsValid)
        {
            var db = new EditImagesModel();
            db.SaveImage(obj);
            if (Request.IsAjaxRequest()) //This does not work.
            {
                return PartialView("EditPhotoForm");
            }
            return RedirectToAction("EditPhotos");

        }
        return View();
    }

....

Почему не устраивает:

if (Request.IsAjaxRequest())
{
    return PartialView("EditPhotoForm");
}

1 Ответ

2 голосов
/ 04 сентября 2011

Почему не устраивает:

Потому что вы забыли включить:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

на вашей странице EditPhoto.cshtml. И из-за этого Ajax.BeginForm помощник не выполняет AJAX-запрос, а просто создает форму POST.

В отличие от ASP.NET MVC 1.0 и 2.0, где Ajax.* помощники, такие как Ajax.ActionLink и Ajax.BeginForm, навязчиво загрязняли вашу разметку javascript, в ASP.NET MVC 3 они просто генерировали атрибуты HTML5 data-* на соответствующие элементы DOM. Таким образом, разметка и JavaScript хранятся отдельно. И вам нужен javascript для интерпретации этих атрибутов. Этот javascript находится в скрипте jquery.unobtrusive-ajax.js, который необходимо включить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...