0

次のコードがありますが、何らかの理由で意図したとおりに機能していません。基本的に、この例をオンラインで見つけて、自分のニーズに合わせたいと思っていましたが、問題は、ページにImageListを表示できないように見えることです。

コードは次のとおりです:-

<script type="text/javascript">
    $(document).ready(function () {

            var imageList = $('#imageList');

            //hide the imageList initially
            imageList.hide();

    });

    var Project = {
        save: function () {
            var projectForm = $("#projectForm");
            if (projectForm.valid()) {
                projectForm.submit();
            }
            else {
                Project.onInvalidForm();
            }
        },
        onInvalidForm: function () {
            //CODE FOR INVALID FORM
        },
        onSaveBegin: function () {
            //CODE FOR SAVE BEGIN
        },
        onSaveSuccess: function () {
            //CODE FOR SAVE SUCCESS
            $('#imageList').fadeIn('slow');
        },
        onSaveFailure: function () {
            //CODE FOR SAVE FAILURE
        },
        onSaveComplete: function () {
            //CODE FOR SAVE COMPLETE
            $('#imageList').fadeIn('slow');
        }
    };
</script>


@using (Ajax.BeginForm(
    "/Create",
    new { },
    new AjaxOptions
    {
            InsertionMode = InsertionMode.Replace,
            OnComplete = "Project.onSaveComplete",
            OnFailure = "Project.onSaveFailure",
            OnSuccess = "Project.onSaveSuccess",
            OnBegin = "Project.onSaveBegin"
    },
    new { id = "projectForm", name = "projectForm" }))
    {
    <div >

何が悪いのか、imageListを表示できないのか指摘できないようです。コードはを通過しています。onSaveSuccess: function ()またonSaveCompete: function()alert('')以前にコードを実行して、実際にそこから通過していることを確認しました。

あなたの助けと時間をありがとう

@if(Model != null)
{
    @Html.Hidden("hfProjectId", Model.Project.ProjectID)
}

<div class="editor-label">
        @Html.LabelFor(m => m.Project.ProjectTitle)
 </div>
 <div class="editor-field">
        @Html.TextBoxFor(m => m.Project.ProjectTitle)
        @Html.ValidationMessageFor(m => m.Project.ProjectTitle)
 </div>
 <div class="editor-label">
        @Html.LabelFor(m => m.Project.ProjectText)
 </div>
 <div class="editor-field">
        @Html.TextBoxFor(m => m.Project.ProjectText)
        @Html.ValidationMessageFor(m => m.Project.ProjectText)
 </div>
 <p>
        <input type="submit" value="Create" />
 </p>
</div>
}


<div id='imageList'>
@{
    if (Model != null)
    {
        if(Model.Project.ProjectID > 0)
        {
            Html.Partial("~/Views/Shared/ImageUpload.cshtml", new MvcImageUploaderPartial.ViewModels.ImageModel(Model.Project.ProjectID, 2, "Edit"));
        }
        else
        {
            Html.Partial("~/Views/Shared/ImageUpload.cshtml", new MvcImageUploaderPartial.ViewModels.ImageModel(0, 0, "Create"));
        }
    }
}
</div>

** * ** * UPDATE * ** * ** * ** * ** * ** * ** * ** * プロジェクトコントローラー:-

        [HttpPost]
    public ActionResult Create(Project project)
    {
        ProjectModel viewModel = new ProjectModel();

        if (ModelState.IsValid)
        {
            db.Projects.Add(project);
            db.SaveChanges();
            viewModel.Project = project;

            return View("Create", viewModel);
        }

        return View(project);
    }

ImageController:-

        public ActionResult Index()
    {
        ImageModel model = new ImageModel();

        return RedirectToAction("Create", "Project", model);
    }

    public ActionResult Save()
    {
        IEnumerable<Image> ImageList;

        //if (!String.IsNullOrEmpty(TempData["ProjectId"].ToString()))
        //    iProjId = Convert.ToInt32(TempData["ProjectId"]);

        foreach (string name in Request.Files)
        {
            var file = Request.Files[name];

            string fileName = System.IO.Path.GetFileName(file.FileName);

            Image image = new Image(fileName, Request["description"]);
            ImageModel model = new ImageModel();

            ImageList = model.Populate();
            model.Add(ImageList, image, file);
        }

        return RedirectToAction("Index", "Image");
    }
4

1 に答える 1

0

AjaxOptionsを通過していないことがわかりましたUpdateTargetId。以下のようにコードを更新する必要があります。

@using (Ajax.BeginForm(
    "/Create",
    new { },
    new AjaxOptions
    {
            UpdateTargetId = "imageList",
            InsertionMode = InsertionMode.Replace,
            OnComplete = "Project.onSaveComplete",
            OnFailure = "Project.onSaveFailure",
            OnSuccess = "Project.onSaveSuccess",
            OnBegin = "Project.onSaveBegin"
    }
    //..

もう 1 つ重要なことは、で指定した要素はUpdateTargetId、ajax アクションによって返される部分ビューではなく、メイン ビューにある必要があるということです。また、目立たない ajax ライブラリを参照していることを確認してください。

于 2012-06-11T13:11:10.857 に答える