0

私はこのようなビューを持っています:

<div id="basic-information-container">
    @Html.Action("MyBasicInformation")
</div>

<div id="cv-container">
    @Html.Action("MyCv")
</div>

<div id="experiance-container">
    @Html.Action("MyExperiances")
</div>

<div id="academic-background-container">
    @Html.Action("MyAcademicBackgrounds")
</div>

部分ビュー MyCv は次のとおりです。

@model Model.Profile.CvModel

<script type="text/javascript">
    $(function () {
        $("#cv-container form").submit(function () {
            $(this).ajaxSubmit({
                target: "#cv-container",
                cache: false
            });

            return false;
        });
    });
</script>

@using(Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Cv</legend>
        @Html.EditorFor(model => model.File) 
        @* I have working editor template for HttpPostedFileBase, nothing to worry about this*@
        @Html.ValidationMessageFor(model => model.File)
        <p>
            <input type="submit" value="Upload" />
        </p>
    </fieldset>
}

そして、これがCvModelのコードです

public class CvModel {
    public int? Id { get; set; }

    [Required]
    public HttpPostedFileBase File { get; set; }

    public CvModel() {

    }

    public CvModel(int? cvId) {
        Id = cvId;
    }
}

そして、これがMyCvのpostメソッドです

[HttpPost]
public ActionResult MyCv(CvModel model) {
    // upload cv to database
    return PartialView(model);
}

さて、問題は、なんらかの理由で CV をアップロードすると、の部分ビューMyBasicInformation, MyExperiances and MyAcademicBackgroundsがリロードされることです。私が間違ったことを見つけることができません。私はどこで間違っていますか?

ちなみに、の get アクションがMyBasicInformation, MyExperiances and MyAcademicBackgrounds呼び出されていないことを確認しました。ビューが直接リロードされています。

4

1 に答える 1

2

子アクションを使用しているため、フォームに投稿するアクションを明示的に指定する必要があります。そうしないと、フォームが正しいアクションに送信されない可能性があります。また、enctype="multipart/form-data"ファイルのアップロードに必要な がフォームにありません:

そう:

@using(Html.BeginForm()) {

なる必要があります:

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

また、コンソールの潜在的なエラーについて FireBug で確認してください。AJAX リクエストが正常に送信されたことを確認します。.submit()2 回目にイベントが再アタッチされていることを確認します。

于 2012-07-11T06:05:19.183 に答える