画面上のリンクをクリックするとポップアップ ウィンドウが開きます。リンクのあるビューは _DetailsSurvey です。リンクをクリックすると、ポップアップ ウィンドウが開き、_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>
提供された入力に問題がある場合は、各フィールドの横に検証メッセージを表示します。モデルが有効だった場合は、ポップアップ ウィンドウを閉じます。