3

画面上のリンクをクリックするとポップアップ ウィンドウが開きます。リンクのあるビューは _DetailsS​​urvey です。リンクをクリックすると、ポップアップ ウィンドウが開き、_EditSurvey ビューの内容が表示されます。_EditSurvey の最後に、ボタンがあります

<input type="submit" value="Save" />

私は Ajax オプションを使用しており、ボタンをクリックした後、modelstate が有効な場合、Survey テーブルに行を挿入します。

 @using (Ajax.BeginForm("SubmitSurvey", "Blog", null, new AjaxOptions
    {
    UpdateTargetId = "context",
    InsertionMode = System.Web.Mvc.Ajax.InsertionMode.Replace,
    HttpMethod = "Post",
    Url = "/Home/SubmitSurvey"
    },
    new { surveyItem = @Model }))

私がやりたいのは、SubmitSurvey メソッドから戻った後に modelstate が有効である場合、ポップアップ ウィンドウを閉じたいということです。次のメソッドを使用してこれを実現しますが、機能しません。

    Employee employee;
    if (ModelState.IsValid)
    {

        int employeeId = surveyItem.EmployeeId;
        int trainingId = surveyItem.TrainingId;
        employee = _work.EmployeeRepository.GetSet().
        FirstOrDefault(a => a.Id == employeeId);


        var training = _work.TrainingRepository.GetSet().Where(a => a.EmployeeId == employeeId && a.Id == trainingId).ToList().ElementAt(0);
        training.Survey = surveyItem.survey;
        training.SurveyId = surveyItem.survey.Id;

       /* _work.SurveyRepository.Add(surveyItem.survey);
        _work.SurveyRepository.Save();*/
        _work.TrainingRepository.UpdateAndSave(training);
        _work.TrainingRepository.Save();

    }
    else
    {

        return PartialView("_EditSurvey", surveyItem);
    }
    return JavaScript("window.close()");

次のようにポップアップリンクを作成します

 <tr>
    <td class="view_detail_label">
        Eğitim Adı
    </td>
        <td>

           @Html.ActionLink(
           training.Name.Name, 
           "AddSurvey", 
           new { 
               employeeId = Model.Id, 
               trainingId = training.Id 
           },
           new {
               @class = "addSurvey"
           }
       )
         <div class="result" style="display:none;"></div>             
        </td>            
    </tr>

呼び出される ajax コードは次のとおりです。

 $(document).ready(function () {
    $('.addSurvey').click(function () {
        $.ajax({
            url: this.href,
            type: 'GET',
            cache: false,
            context: this,
            success: function (result) {
                $(this).next('.result').html(result).dialog({
                    autoOpen: true,
                    title: 'Anket',
                    width: 500,
                    height: 'auto',
                    modal: true
                });
            }
        });
        return false;
    });
});

私のポップアップ ビューでは、以前に示した Ajax BeginForm を使用しています。その下には、ユーザーが調査の値を入力するテーブルがあります。最後に送信ボタンがあります。

<table id="context">
<tr>
    <td>
        <div class="editor-label">
            @Html.LabelFor(model => model.survey.Context)
        </div>
    </td>
    <td>
        <div class="editor-field">
            @Html.EditorFor(model => model.survey.Context)
            @Html.ValidationMessageFor(model => model.survey.Context)
        </div>
    </td>
   </tr>
 <tr>
        <td>
            <input type="submit" value="Kaydet" />
            </td>
    </tr>

提供された入力に問題がある場合は、各フィールドの横に検証メッセージを表示します。モデルが有効だった場合は、ポップアップ ウィンドウを閉じます。

4

1 に答える 1