フォームを含む部分ビュー「CreateJobLine.cshtml」があります。このフォームを @Html.Action メソッドを使用してレンダリングすると、フォーム タグのないフォーム フィールドが作成されます。私はHtml.BeginFormを使用し、フォームをハードコーディングしました(以下)が、どちらの状況でもタグを生成しません。また、jqueryui のダイアログ ウィジェットを使用してフォームを表示しています。
---部分図 ---
//filename: CreateJobLine.cshtml
@model Recruitment.Models.JobLine
@if(false){
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<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>
}
<div id="addnewjoblinediv">
<form id="createjoblineform" action="@Url.Action("CreateJobLine")" method="post">
@Html.ValidationSummary(true)
<fieldset>
<legend>JobLine</legend>
@Html.Hidden("job_id", Model.JobId)
<div class="editor-label">
@Html.LabelFor(model => model.Description)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Description)
@Html.ValidationMessageFor(model => model.Description)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.TimeSpent)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.TimeSpent)
@Html.ValidationMessageFor(model => model.TimeSpent)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.JobId)
</div>
<div class="editor-field">
@Html.DisplayFor(model => model.JobId)
@Html.ValidationMessageFor(model => model.JobId)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
</form>
</div>
編集ビューでは、Html.Action を呼び出して部分ビューを読み込みます。
---ビューの編集---
//filename Edit.cshtml
...
@Html.Action("CreateJobLine", "Job", new { job_id = Model.Job.JobId})
<a id="addnewjoblinelink" href="#">Add New JobLine</a>
</fieldset>
}
<script type="text/javascript">
$(document).ready(function () {
$("div#addnewjoblinediv").dialog({ autoOpen: false, modal:true, width:550, title:"Add New JobLine"});
$("a#addnewjoblinelink").click(function () {
$("div#addnewjoblinediv").dialog("open");
}
);
}
);
</script>
ここにコントローラーがあります ---ジョブコントローラー---
//JobController.cs
...
[HttpGet]
public PartialViewResult CreateJobLine(int job_id)
{
var jobline = new JobLine();
jobline.JobId = job_id;
jobline.TimeSpent = 0;
return PartialView(jobline);
}
[HttpPost]
public ActionResult CreateJobLine(JobLine jobline)
{
if (ModelState.IsValid)
{
db.JobLines.Add(jobline);
db.SaveChanges();
return RedirectToAction("Index");
}
return RedirectToAction("Edit", new { id = jobline.JobId });
}
...
/Job/CreateJobLine/5 への呼び出しは、すべてのフォーム要素を含むフォーム コンテンツを取得しますが、フォーム タグ自体がありません。JobLine を作成できるように、そのフォーム アクションを /Job/CreateJobLine ポスト メソッドに設定したいと考えています。
ありがとうございました。